有两种实现Comet的技巧。一个使用HTTP流,它使用一个持久化的TCP连接在客户端/服务器之间发送和接收多个HTTP请求/响应。第二个是HTTP长轮询,它保持服务器打开连接,并且一旦发生事件,响应被提交并且连接被关闭。然后,等待新事件到达的客户立即重新打开新的长轮询连接。CometD(Bayeux协议Comet)使用HTTP流还是HTTP长轮询?
我使用的是Faye红宝石宝石,我注意到它使用了Comet/Bayeux开箱即用。但我找不到它使用的彗星技术。我只是认为Bayeux是发布 - 订阅协议。我很想知道它是否存在HTTP流和长轮询的缺点。它是否允许全双工通信(双向通信,并且与半双工不同,允许同时进行)?
Comet如何不会导致像apache2这样的http服务器崩溃,因为这么多打开的tcp连接会消耗内存。我的意思是,如果你有64,000个开放的tcp连接,每个连接1mb,那仅仅是64GB的内存,肯定会导致大多数服务器崩溃。 – Donato
单独的tcp连接不会消耗1 MiB的内存。这是与该连接关联的线程消耗该MiB。这就是为什么apache2不适合长时间轮询的服务器。其他服务器,如[Jetty](http://eclipse.org/jetty)(其支持[CometD](http://cometd.org)),nginx等能够维持数万个连接而不消耗很多内存,因为它们在这种情况下使用异步I/O和线程更有效。在达到内存限制之前,我能够将400,000个CometD客户端连接到单个CometD/Jetty服务器。 – sbordet
感谢您的美妙回馈。我正在使用apache2,但在阅读您的意见后,它是nginx。 – Donato