我们是否可以延迟PHP页面的响应,直到同一访问者的另一个标志请求


Can we delay response of a PHP page until another flag request of same visitor?

我正在尝试制作一个聊天脚本,但我不希望访问者的浏览器每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。让用户轮询更新可能听起来很多,但如果做得适当,它是好的。