【发布时间】:2012-05-17 03:53:00
【问题描述】:
所以我和一个朋友正在构建一个基于 Web 的、带有 jQuery 和 PHP 核心的 AJAX 聊天软件。到目前为止,我们一直在使用标准程序,即每两秒左右调用一次服务器以查找更新。但是我开始不喜欢这种方法,因为它速度不快,而且即使没有数据返回,也有大量的请求从服务器来回传输,也不是“成本效益高”。
我们的一位项目支持者建议我们研究一种称为 COMET 的技术,或者更具体地说,长轮询技术。然而,在阅读了不同文章和博客文章中的相关内容后,我发现它在与 Apache 服务器一起使用时并不是那么实用。似乎大多数人只是说“这不是一个好主意”,但并没有提供太多关于 Apache 一次可以处理多少个请求的细节。
PureChat 的全部目的是为人们提供一个看起来很棒、速度很快且适用于大多数服务器的聊天。因此,我假设我们大约 96% 的用户将使用 Apache,而不是 Lighttpd 或 Nginx,它们被认为更适合长轮询。
切入正题:
在您看来,继续使用 setInterval 并重复请求新数据会更好吗?还是使用长轮询更好,尽管大多数用户将使用 Apache?此外,可以更具体地了解在 Apache 服务器发生故障并死机之前大约有多少人可以使用聊天?
【问题讨论】:
-
Tomcat 7 最新添加了对 WebSockets 的支持,因此请考虑将轮询后备作为另一种选择。
-
如果这是小规模的,这应该不是问题。如果您计划有 1000 多个并发用户,Apache 将会死掉,因为对于每个连接,它都会打开一个新线程,这会消耗大量内存。 NginX 在单个线程上运行,因此它可以扩展到多个连接。但是,如果您使用的是 PHP,那么在许多情况下,这对您的帮助并没有您想象的那么大。有关详细信息,请参阅我的以下答案。
标签: php jquery ajax apache long-polling