【问题标题】:How can you push data to a web page client?如何将数据推送到网页客户端?
【发布时间】:2010-10-31 09:29:03
【问题描述】:

我刚刚了解了 AJAX 推送引擎,但它在 Linux/Apache 上运行,这对我来说不是一个选项。

http://www.ape-project.org/

目前使用 AJAX 来保持页面最新,我必须经常轮询服务器,这对于高流量站点来说不是很好。仅在必要时将数据推送到客户端的选项是一个不错的选择,但原生 JavaScript 不支持套接字,AFAIK。我读到的一个技巧,但该网站现已消失,是使用 Flash 模块来处理套接字通信并将消息中继到 JavaScript。

研究这种方法的麻烦在于,“JavaScript push”作为关键字提出了数组的推送函数,而不是我想要的上下文。

如何与服务器建立持久连接以在浏览器中进行推送通信?我是否需要 Flash/ActionScript 或者是否有其他选项可以与所有当前活动的浏览器一起使用? (IE6/7/8、FF3、Safari、Chrome)

当涉及到服务器时,我还需要解决由于 Origin 策略和端口安全性而导致的复杂性。感谢您指出任何可以解释可用选项的内容。

【问题讨论】:

标签: javascript ajax


【解决方案1】:

你要找的是websocket https://en.wikipedia.org/wiki/WebSocket

【讨论】:

    【解决方案2】:

    这是有趣的东西,但我没有在这些 Wiki 页面上阅读任何有关可伸缩性问题的内容。如果您有 10,000 个打开的长轮询连接,Web 服务器会做什么?

    此外,对于那些不熟悉基本概念的人来说,重要的是要了解以 ad-hoc 方式将数据从服务器推送到客户端是不可能的,而且永远都是。即使 HTTP 协议支持这一点,网络也不支持,尤其是在涉及 NAT 防火墙的情况下。

    因此,任何声称提供服务器推送通信的解决方案都必须依赖于由客户端发起、保持打开并最终超时的连接。我对此感到担忧,因为它一定会对服务器的可扩展性和性能产生负面影响。

    【讨论】:

    • 好像facebook、google都用了long polling,还没有倒下。无论如何,这不是不可能
    • 如果你想从一个服务器打开一个到客户端的连接,而 NAT 的方式是端口敲门的方法可以用来建立连接。然后你可以维护一个套接字。我担心的是服务器保持许多套接字处于活动状态的限制。如果我能检测到客户端是否空闲,我至少会偶尔重置连接或闲置不活动的客户端。
    • 好吧,altCognito,如果 Todd Hoff 在他的博客上是对的,那么 Facebook 去年 1 亿美元的硬件投资就解决了这个问题。但是这篇文章还有一些关于服务器实现的其他细节。显然,在 .Net 或任何其他主流网络服务器/语言平台上,您不想在 IIS 上执行长轮询,因为每个被阻塞的连接都会占用昂贵的资源。
    【解决方案3】:

    Direct Web Remoting (DWR) 库支持反向 Ajax,这听起来像是您正在寻找的。它支持 Comet(以及 Polling 和 PiggyBack)。更多信息请访问他们的网站:http://directwebremoting.org/dwr/index.html

    【讨论】:

      【解决方案4】:

      你要的是COMET,不然我也查一下long polling

      I asked a similar question.

      【讨论】:

      • 我只是在整理我的参考资料 :)
      猜你喜欢
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多