【问题标题】:Comet VS Ajax pollingComet VS Ajax 轮询
【发布时间】:2011-02-27 20:26:27
【问题描述】:

我需要创建一个类似于 facebook 聊天的聊天。

对于 Comet,我需要更多内存来保持连接。

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

所以...如果延迟(3-4 秒)无关紧要,Ajax 轮询是否更适合我的情况?

【问题讨论】:

  • 我想你刚刚回答了你自己的问题 :)

标签: javascript ajax comet chat polling


【解决方案1】:

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

【讨论】:

  • 但是对于 Comet,我需要更多内存来保持打开连接...不?
  • 保持连接本身并没有那么有害。内存消耗更多取决于您将选择的服务器端 IO API - 阻塞或非阻塞。如果选择阻塞 API,每个连接都会有一个线程 -> 3-4k 打开连接的内存问题。如果选择非阻塞 API(几乎每个应用服务器都有 NIO 能力),可以保持数百万个打开的连接。
  • 如果你在做非阻塞 io,你不需要 much 更多的内存
【解决方案2】:

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

看看to this problem

关于NIO over IO的the false superiority

iobound 的文章只是显示 IO 优于 NIO 并且是的 IO 在 NIO 之前内存不足(顺便说一下,作者没有尝试以较低的值减少堆栈内存)。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2012-07-07
      • 2011-01-12
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 2011-08-08
      • 2011-02-03
      相关资源
      最近更新 更多