【发布时间】:2011-11-05 00:21:48
【问题描述】:
假设我正在创建一个网络聊天,其中聊天消息存储在 SQL 数据库中(我不知道该怎么做),使用 AJAX 进行长轮询而不是简单地每 x 秒轮询一次有什么好处?
由于 PHP 仅在您打开页面时运行,长时间轮询的 PHP 脚本也必须每秒检查新消息。那么长轮询有什么好处呢?无论哪种方式,我都会有 x 秒的延迟,只有长轮询才会在服务器上进行定期检查。
【问题讨论】:
标签: php long-polling
假设我正在创建一个网络聊天,其中聊天消息存储在 SQL 数据库中(我不知道该怎么做),使用 AJAX 进行长轮询而不是简单地每 x 秒轮询一次有什么好处?
由于 PHP 仅在您打开页面时运行,长时间轮询的 PHP 脚本也必须每秒检查新消息。那么长轮询有什么好处呢?无论哪种方式,我都会有 x 秒的延迟,只有长轮询才会在服务器上进行定期检查。
【问题讨论】:
标签: php long-polling
就您而言,长轮询有两个优点:
首先,长轮询允许客户端在服务器上可用后立即接收消息更新,从而提高您的网络聊天的响应能力。
第二个优点是客户端应用程序几乎不需要更改即可在此模式下工作。从客户端的角度来看,阻塞的轮询请求看起来像是网络延迟,唯一的区别是客户端不需要在发送轮询请求之间等待,就像您只是每 x 秒轮询一次一样。
但是,让服务器保留请求会增加服务器负载。通常具有同步请求处理的 Web 服务器每个请求使用一个线程,这意味着等待请求会阻塞处理它的线程。因此,使用长轮询从服务器获取消息更新的 100 个聊天客户端将阻塞 100 个线程。
这些线程中的大部分都会处于等待状态,但是每个线程仍然会占用相当多的资源。这个问题在 Comet 中通过异步请求处理来解决,这是一种允许请求阻塞而不阻塞线程的技术,现在 受到包括 Tomcat 在内的多个 Web 服务器的支持。
【讨论】: