我是这个网站的新手,所以我真的希望我能提供有关我的问题的所有必要信息。
我一直在尝试使用长轮询创建“新消息到达通知”。目前我正在通过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 秒内被写入的频率超过一次,但它仅在我从一页到另一页时才开始。
请让我知道是否有任何其他信息可能会有所帮助。
谢谢你。