我是新来这个网站,所以我真的希望我会提供所有关于我的问题的必要信息。Ajax长轮询(彗星)+ PHP上lighttpd v1.4.22多个实例问题
我一直在尝试使用长轮询来创建“新邮件到达通知”。目前,我正在通过我网站中每个页面的window.onLoad
事件启动轮询请求。
在服务器端我有无限循环:
while(1){
if(NewMessageArrived($current_user))break;
sleep(10);
}
echo $newMessageCount;
在客户端我有以下的(简化的)AJAX功能:
poll_new_messages(){
xmlhttp=GetXmlHttpObject();
//...
xmlhttp.onreadystatechange=got_new_message_count;
//...
xmlhttp.send();
}
got_new_message_count(){
if (xmlhttp.readyState==4){
updateMessageCount(xmlhttp.responseText);
//...
poll_new_messages();
}
}
的问题是,在每个页面载入,上面的循环再次开始。结果是多个无限循环为每个用户,最终使我的服务器挂起。
* NewMessageArived()
函数向MySQL DB查询新的未读消息。
*在php脚本的开头,我运行start_session()
以获得$current_user
的值。
我目前是本网站的唯一用户,因此我很容易通过将time()
写入此循环中的文件来调试此行为。我所看到的是文件在10秒内被写入的次数比一次多,但是只有当我一页一页地进行时才会启动。
如果有任何其他信息可能有帮助,请让我知道。
谢谢。
谢谢您的回答。每次我回复一些数据时,这个解决方案不会触发ajax响应函数吗?使此解决方案成为常规轮询而不是长轮询。 – fibonacci 2009-11-23 21:20:00