3

我知道 Comet 长轮询对 Web 服务器不利,因为它们每个连接占用一个线程。因此,您不能有很多具有持久连接的用户,否则您的 Web 服务器将崩溃。

这与 HTML 5 中的 Web 套接字相同吗?

如果每个持久连接也占用一个线程,这如何解决资源问题?

4

2 回答 2

3

...因为它们每个连接占用一个线程

这个假设是完全不正确的。请参阅我在此处给出的答案以获取更多信息。(例如)完全可以在 IIS 中使用IAsyncHttpHandler来执行长轮询,而无需为每个客户端使用一个线程。

于 2010-08-09T01:10:13.017 回答
2

Spender 是正确的,只有糟糕的 Web 服务器(例如带有 mpm_worker 或 mpm_prefork 的 Apache)每个连接使用一个线程/进程。

智能 Comet 或 Websockets 网关(我不久前写过这样一个)将具有事件驱动架构 - 基于 Proactor(具有固定的线程池)或 Reactor(单线程)模式。长轮询应该在保持活动的 HTTP 连接上完成(对于支持它的浏览器 - 大约 99%),在这种情况下,它将具有与 Websockets 相似的性能/可扩展性特征。

于 2010-08-09T01:31:09.053 回答