【问题标题】:Is "long polling" the most efficient way to create a Web Real Time App?“长轮询”是创建 Web 实时应用程序的最有效方式吗?
【发布时间】:2011-01-27 06:18:16
【问题描述】:

我想创建一个这样的应用程序:

http://collabedit.com/

创建这个实时应用程序最有效的方法是什么?

快闪?长轮询? Http流式传输?还是别的什么?

谢谢 ;)

【问题讨论】:

    标签: javascript flash streaming comet long-polling


    【解决方案1】:

    目前,长轮询可能是最好的解决方案。许多大牌网站都有长轮询实现,包括 Facebook、Google 和 eBay。不是每个人的浏览器都安装/启用了 Flash。将来Web Sockets 可能会为我们做更轻松的工作。

    更新:在撰写本文时,WebSocket API 已在最新的 WebKit (Chrome/Safari) 和 Firefox 4 beta 中实现。还有一个带有 API 实现的 Opera available for download 的公共快照构建。这意味着测试 API 是广泛可用的。如需更多信息,请参阅this answer

    【讨论】:

    • +1 我喜欢长轮询。未来可能会有所不同,但我不会选择 Flash。
    • 我使用过 phpfreechat(使用长轮询),只有 20 人非常非常慢!!为什么 ?我需要同时为数百万人创建一个实时应用程序!!
    • @xRobot:您检查了常见问题解答吗? [phpfreechat.net/faq] 它为与磁盘访问相关的一个性能问题提供了解决方案。除此之外,您需要一个非常强大的服务器来同时处理数百万个连接。正常的http请求是open->get data->close,所以同时连接数比较少。通过长轮询,它是打开->等待数据->关闭,几乎可以保证同时进行这么多。服务器只能处理有限数量的并发连接,如果你明白我的意思,你会得到你所支付的!
    • 我不认为 Google 使用 Long-Poll 来实现 Comet。至少,GMail 使用 XHR-streaming 实现了 comet。
    • +1,完全跨浏览器的最佳方式是长轮询,它在许多彗星服务器中实现。 gtalk 提到的 hack 是 htmlfile 流,它是不同的并且有其自身的局限性:cometdaily.com/2007/11/18/ie-activexhtmlfile-transport-part-ii
    【解决方案2】:

    我不认为长轮询是最有效的 Comet 方法。无论如何,它会在得到响应后发送新的 HTTP 请求。与 HTTP 流相比,它需要更多的 HTTP 请求。

    但是,长轮询可能比 HTTP 流更可靠且更容易实现。根据此article in Google Code,如果中间 HTTP 代理缓冲内容,则 HTTP 流可能无法正常工作。

    有趣的是,GMail 不使用长轮询。在 Http sniffer 的帮助下,很明显它使用了 Comet 的 HTTP 流。

    【讨论】:

    • Facebook 也不使用长轮询?你知道 http 流媒体的任何例子吗?谢谢^_^
    • 我没有亲自测试过,但听说Facebook聊天是通过长轮询实现的。 GMail 是 Http 流媒体。 Outlook Web Access 也是如此。
    • @xRobot,如果你期待how-to,这个网址是一个很好的总结:cometdaily.com/2007/12/11/…
    【解决方案3】:

    所有不同的方法都有不同的优缺点,我不是这方面的专家,这就是为什么我会建议你避免做出选择,避免每种方法的开发和调整方法涉及,避免未来可用技术的变化(即随着 HTML5 网络套接字的到来),使用一个抽象使用的传输方法的库,并根据客户端功能选择最佳方法:

    http://socket.io/

    这个奇妙的库让创建实时应用程序变得异常简单!并且有各种服务器端实现:Python (Tornado)、Java、Google GO、Rack (Ruby),除了 Node.js 中的主流实现(服务器端 JavaScript)

    【讨论】:

    • 是的..!!已经将它与 Java 和 NodeJS 一起使用。它的出色工具。对于 java,我们可以使用 netty 服务器实现。
    猜你喜欢
    • 2011-06-06
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 2015-11-24
    • 2011-07-12
    相关资源
    最近更新 更多