长轮询在php中有什么好处?

时间:2011-08-27 08:20:03

标签: php long-polling

假设我正在创建一个网络聊天,其中聊天消息存储在SQL数据库中(我不知道该怎么做),使用AJAX进行长轮询而不是简单地每隔x秒轮询一次有什么好处?

由于PHP仅在您打开页面时运行,因此长轮询的PHP脚本也必须每秒检查新消息。那么长轮询有什么好处呢?无论哪种方式,我将有一个x秒的延迟,只有长轮询服务器上的定期检查。

1 个答案:

答案 0 :(得分:3)

在您的情况下,长轮询有两个好处:

首先,长轮询允许客户端在服务器上可用后立即接收消息更新,从而提高网络聊天的响应能力。

第二个优点是,在此模式下,客户端应用程序几乎不需要进行任何更改。从客户端的角度来看,阻塞的轮询请求看起来像网络延迟,唯一的区别是客户端不需要在发送轮询请求之间等待,就像您每隔x秒轮询一次一样。


但是,使服务器保留请求会增加服务器负载。具有同步请求处理的常用Web服务器每个请求使用一个线程,这意味着等待请求会阻塞处理它的线程。因此,100个使用长轮询从服务器获取消息更新的聊天客户端将阻止100个线程。

这些线程中的大多数都处于等待状态,但每个线程仍然使用大量资源。 Comet通过异步请求处理解决了这个问题,这是一种允许请求阻塞而不阻塞线程的技术,现在就是这样 由几个Web服务器支持,包括Tomcat。

我的回答参考:oBIX Watch communication engine reference document