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