我正在尝试制作一个聊天脚本,但我不希望访问者的浏览器每0.5秒请求一条新消息。相反,我希望服务器立即发送新消息。
我想我可以向服务器发送一个请求,如果没有任何新的消息,服务器将等待直到有一个。这个等待时间不需要很长,也许2-3秒。
我尝试了PHP的sleep()
函数:
while(1)
{
$temp=$db->query("SELECT * FROM chat WHERE (id=36 OR id=12) AND clock>".$last_time);
if ($temp->rowCount()!=0) break;
sleep(1);
}
这个"等待直到中断"过程在其他访问者打破循环时工作,但是当开始循环的访问者试图发送消息时,他将永远等待。
我是不是走错路了?
编辑*系统是IIS 7 - PHP Version 5.3.6
我不太确定你为什么在这里标记facebook-chat
。
无论如何,这种方法是不合适的,并且会使数据库查询使服务器过载。你应该使用长轮询或websockets。让用户轮询更新可能听起来很多,但如果做得适当,它是好的。