【发布时间】:2009-11-23 20:43:10
【问题描述】:
我是这个网站的新手,所以我真的希望我能提供有关我的问题的所有必要信息。
我一直在尝试使用长轮询创建“新消息到达通知”。目前我正在通过我网站中每个页面的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 秒内被写入的频率超过一次,但它仅在我从一个页面转到另一个页面时才开始。
如果有任何其他信息可能有帮助,请告诉我。
谢谢。
【问题讨论】:
标签: php javascript ajax comet long-polling