【发布时间】:2011-03-27 02:10:43
【问题描述】:
我知道 Comet 长轮询对 Web 服务器不利,因为它们每个连接占用一个线程。所以你不能让很多用户有持久连接,否则你的网络服务器会崩溃。
这与 HTML 5 中的 Web 套接字相同吗?
如果每个持久连接占用一个线程,如何解决资源问题?
【问题讨论】:
我知道 Comet 长轮询对 Web 服务器不利,因为它们每个连接占用一个线程。所以你不能让很多用户有持久连接,否则你的网络服务器会崩溃。
这与 HTML 5 中的 Web 套接字相同吗?
如果每个持久连接占用一个线程,如何解决资源问题?
【问题讨论】:
Spender 是正确的,只有糟糕的 Web 服务器(例如带有 mpm_worker 或 mpm_prefork 的 Apache)每个连接使用一个线程/进程。
智能 Comet 或 Websockets 网关(我不久前写过这样一个)将具有事件驱动架构 - 基于 Proactor(具有固定线程池)或 Reactor(单线程)模式。长轮询应该在保持活动的 HTTP 连接上完成(对于支持该连接的浏览器 - 大约 99% 的连接),在这种情况下,它将具有与 Websocket 相似的性能/可扩展性特征。
【讨论】:
...因为它们每个连接占用一个线程
这个假设是完全不正确的。有关更多信息,请参阅我给 here 的答案。 (例如)完全可以在 IIS 中使用IAsyncHttpHandler 来执行长轮询,而无需为每个客户端使用一个线程。
【讨论】: