2010-06-04 120 views
8

我需要创建一个像Facebook聊天一样的聊天。彗星VS Ajax轮询

彗星我需要更多的内存来保持连接。

如果我每3-4秒发送一次请求,使用Ajax轮询就会出现延迟问题。

因此......如果延迟(3-4秒)无关紧要,Ajax Polling对我的情况更好吗?

+1

我想你只是回答了你自己的问题:) – 2010-06-04 15:02:11

回答

1

如果延迟不是问题,那么AJAX可能会更好。如果你不是非常非常小心的话,Comet可能会遇到在同一个客户端/服务器对之间维持多个连接的问题。 (Ref)

6

延迟并不是唯一的问题。 COMET(长轮询)“保存”您的流量 - 当您使用轮询时,您无法知道服务器是否发生变化,因此某些呼叫可能仅仅是浪费流量和资源(例如,即使没有人聊天,你每3-4秒打一次电话)。在COMET的情况下,您通常只需要打一个电话即可从服务器获取更新(命中率100%)。

+2

但与彗星,我需要更多的记忆,以保持打开连接...不? – xRobot 2010-06-07 16:06:34

+1

保持连接本身并没有那么有害。内存消耗更多取决于您选择的服务器端IO API - 阻塞还是非阻塞。如果您选择阻塞API,则每个连接都会有一个线程 - > 3-4k打开连接时出现内存问题。如果您选择非阻塞API(几乎每个应用程序服务器都具有NIO功能),则可以保留数百万个打开的连接。 – 2010-06-07 16:46:47

+1

你可能会发现这个有趣的 - http://iobound.com/2008/11/comet-nio/ – 2010-06-07 22:58:26

2

@Vasil: “你可以保持数百万打开的连接”

看看to this problem

而且随着IO关于NIO的the false superiority

iobound文章显示IO优于NIO,yes IO在NIO之前内存不足(顺便说一下,作者还没有试图用较低的值减少堆栈内存)。