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