COMET长连接实例

作者: aries 分类: PHP 发布时间: 2013-07-10 09:28 ė 1430次浏览 6 0评论

demo.html

<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<title>Comet Test</title>
<script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">
(function($){
	function handleResponse(response){
	$('#content').append('<div>' + response['msg'] + '</div>');
	}
<span class="highlight-kd">var</span> <span class="highlight-nx">timestamp</span> <span class="highlight-o">=</span> <span class="highlight-mi">0</span><span class="highlight-p">;</span>
<span class="highlight-kd">var</span> <span class="highlight-nx">url</span> <span class="highlight-o">=</span> <span class="highlight-s1">&#39;./chat_backend.php&#39;</span><span class="highlight-p">;</span>
<span class="highlight-kd">var</span> <span class="highlight-nx">noerror</span> <span class="highlight-o">=</span> <span class="highlight-kc">true</span><span class="highlight-p">;</span>
<span class="highlight-kd">var</span> <span class="highlight-nx">ajax</span><span class="highlight-p">;</span>

<span class="highlight-kd">function</span> <span class="highlight-nx">connect</span><span class="highlight-p">()</span> <span class="highlight-p">{</span>
	<span class="highlight-nx">ajax</span> <span class="highlight-o">=</span> <span class="highlight-nx">$</span><span class="highlight-p">.</span><span class="highlight-nx">ajax</span><span class="highlight-p">(</span><span class="highlight-nx">url</span><span class="highlight-p">,</span> <span class="highlight-p">{</span>
		<span class="highlight-nx">type</span><span class="highlight-o">:</span> <span class="highlight-s1">&#39;get&#39;</span><span class="highlight-p">,</span>
		<span class="highlight-nx">data</span><span class="highlight-o">:</span> <span class="highlight-p">{</span> <span class="highlight-s1">&#39;timestamp&#39;</span> <span class="highlight-o">:</span> <span class="highlight-nx">timestamp</span> <span class="highlight-p">},</span>
		<span class="highlight-nx">success</span><span class="highlight-o">:</span> <span class="highlight-kd">function</span><span class="highlight-p">(</span><span class="highlight-nx">transport</span><span class="highlight-p">)</span> <span class="highlight-p">{</span>
			<span class="highlight-nb">eval</span><span class="highlight-p">(</span><span class="highlight-s1">&#39;var response = &#39;</span><span class="highlight-o">+</span><span class="highlight-nx">transport</span><span class="highlight-p">);</span>
			<span class="highlight-nx">timestamp</span> <span class="highlight-o">=</span> <span class="highlight-nx">response</span><span class="highlight-p">[</span><span class="highlight-s1">&#39;timestamp&#39;</span><span class="highlight-p">];</span>
			<span class="highlight-nx">handleResponse</span><span class="highlight-p">(</span><span class="highlight-nx">response</span><span class="highlight-p">);</span>
			<span class="highlight-nx">noerror</span> <span class="highlight-o">=</span> <span class="highlight-kc">true</span><span class="highlight-p">;</span>
		<span class="highlight-p">},</span>
		<span class="highlight-nx">complete</span><span class="highlight-o">:</span> <span class="highlight-kd">function</span><span class="highlight-p">(</span><span class="highlight-nx">transport</span><span class="highlight-p">)</span> <span class="highlight-p">{</span>
			<span class="highlight-p">(</span><span class="highlight-o">!</span><span class="highlight-nx">noerror</span><span class="highlight-p">)</span> <span class="highlight-o">&amp;&amp;</span> <span class="highlight-nx">setTimeout</span><span class="highlight-p">(</span><span class="highlight-kd">function</span><span class="highlight-p">(){</span> <span class="highlight-nx">connect</span><span class="highlight-p">()</span> <span class="highlight-p">},</span> <span class="highlight-mi">5000</span><span class="highlight-p">)</span> <span class="highlight-o">||</span> <span class="highlight-nx">connect</span><span class="highlight-p">();</span>
			<span class="highlight-nx">noerror</span> <span class="highlight-o">=</span> <span class="highlight-kc">false</span><span class="highlight-p">;</span>
		<span class="highlight-p">}</span>
	<span class="highlight-p">});</span>
<span class="highlight-p">}</span>

<span class="highlight-kd">function</span> <span class="highlight-nx">doRequest</span><span class="highlight-p">(</span><span class="highlight-nx">request</span><span class="highlight-p">)</span> <span class="highlight-p">{</span>
	<span class="highlight-nx">$</span><span class="highlight-p">.</span><span class="highlight-nx">ajax</span><span class="highlight-p">(</span><span class="highlight-nx">url</span><span class="highlight-p">,</span> <span class="highlight-p">{</span>
		<span class="highlight-nx">type</span><span class="highlight-o">:</span> <span class="highlight-s1">&#39;get&#39;</span><span class="highlight-p">,</span>
		<span class="highlight-nx">data</span><span class="highlight-o">:</span> <span class="highlight-p">{</span> <span class="highlight-s1">&#39;msg&#39;</span> <span class="highlight-o">:</span> <span class="highlight-nx">request</span> <span class="highlight-p">}</span>
	<span class="highlight-p">});</span>
<span class="highlight-p">}</span>

<span class="highlight-nx">$</span><span class="highlight-p">(</span><span class="highlight-s1">&#39;#cometForm&#39;</span><span class="highlight-p">).</span><span class="highlight-nx">live</span><span class="highlight-p">(</span><span class="highlight-s1">&#39;submit&#39;</span><span class="highlight-p">,</span> <span class="highlight-kd">function</span><span class="highlight-p">(){</span>
	<span class="highlight-nx">doRequest</span><span class="highlight-p">(</span><span class="highlight-nx">$</span><span class="highlight-p">(</span><span class="highlight-s1">&#39;#word&#39;</span><span class="highlight-p">).</span><span class="highlight-nx">val</span><span class="highlight-p">());</span>
	<span class="highlight-nx">$</span><span class="highlight-p">(</span><span class="highlight-s1">&#39;#word&#39;</span><span class="highlight-p">).</span><span class="highlight-nx">val</span><span class="highlight-p">(</span><span class="highlight-s1">&#39;&#39;</span><span class="highlight-p">);</span>
	<span class="highlight-k">return</span> <span class="highlight-kc">false</span><span class="highlight-p">;</span>
<span class="highlight-p">});</span>

<span class="highlight-nx">$</span><span class="highlight-p">(</span><span class="highlight-nb">document</span><span class="highlight-p">).</span><span class="highlight-nx">ready</span><span class="highlight-p">(</span><span class="highlight-kd">function</span><span class="highlight-p">(){</span>
	<span class="highlight-nx">connect</span><span class="highlight-p">();</span>
<span class="highlight-p">});</span>

})(jQuery);
</script>
<div id="content"></div>
<div style="margin: 5px 0;">
<form action="javascript:void(0);" id="cometForm" method="get">
<input id="word" name="word" type="text" value="">
<input name="submit" type="submit" value="Send">

</form></div>

sadfasdf

chat_backend.php

<?php

$filename = dirname(FILE).'/data.txt';

// 消息都储存在这个文件中
msg</span> <span class="highlight-o">=</span> <span class="highlight-nx">isset</span><span class="highlight-p">(</span><span class="highlight-nv">_GET['msg']) ? $_GET['msg'] : '';

if ($msg != ''){
file_put_contents(filename</span><span class="highlight-p">,</span><span class="highlight-nv">msg);
die();
}

// 不停的循环,直到储存消息的文件被修改
lastmodif</span> <span class="highlight-o">=</span> <span class="highlight-nx">isset</span><span class="highlight-p">(</span><span class="highlight-nv">_GET['timestamp']) ? $_GET['timestamp'] : 0;
currentmodif</span> <span class="highlight-o">=</span> <span class="highlight-nx">filemtime</span><span class="highlight-p">(</span><span class="highlight-nv">filename);
while (currentmodif</span> <span class="highlight-o">&lt;=</span> <span class="highlight-nv">lastmodif){ // 如果数据文件已经被修改
usleep(100000); // 100ms暂停 缓解CPU压力
clearstatcache(); //清除缓存信息
currentmodif</span> <span class="highlight-o">=</span> <span class="highlight-nx">filemtime</span><span class="highlight-p">(</span><span class="highlight-nv">filename);
}

// 返回json数组
$response = array();
response</span><span class="highlight-p">[</span><span class="highlight-s1">&#39;msg&#39;</span><span class="highlight-p">]</span> <span class="highlight-o">=</span> <span class="highlight-nx">file_get_contents</span><span class="highlight-p">(</span><span class="highlight-nv">filename);
response</span><span class="highlight-p">[</span><span class="highlight-s1">&#39;timestamp&#39;</span><span class="highlight-p">]</span> <span class="highlight-o">=</span> <span class="highlight-nv">currentmodif;
echo json_encode($response);
flush();

?>

换一个
暂无评论
Ɣ回顶部