【问题标题】:Can I use Javascript to talk to a server without XMLHttpRequest?我可以在没有 XMLHttpRequest 的情况下使用 Javascript 与服务器通信吗?
【发布时间】:2010-10-17 22:26:08
【问题描述】:

我正在尝试使用 javascript 编写一个聊天客户端,但我只能使用 XMLHttpRequest 与服务器通信,这阻碍了我,据我所知,这完全不合适,正如许多人告诉我的那样。

我已经寻找过其他网络功能,但没有找到,并被告知没有。这几乎足以让我停止寻找,除了 Gmail 似乎以某种方式这样做。它在几分钟内没有发出任何请求,然后,只要我向自己发送电子邮件,我在另一个窗口中的收件箱就会发送 POST 请求并接收电子邮件。由于它已经有几分钟没有向服务器发送任何 http 请求(我使用 firebug 进行了检查),所以它不可能以这种方式与服务器通信,那么它如何知道它什么时候有电子邮件要接收呢?

【问题讨论】:

  • 如果我使用连续轮询,它会占用大量带宽。如果我让连接保持打开状态,它会耗尽连接并导致问题。它们都可能可行,但 Gmail 似乎两者都做不到,如果可以的话,我宁愿避免使用它们。
  • GMail 绝对是使用保活连接;有时称为“挂起 GET”。查看与b.mail.google.com/mail/channel/bind?VER=8&at=etc的连接...
  • 另一种选择是编写一个小型 java 小程序来为您进行通信,或者用 java 编写整个聊天客户端。

标签: javascript gmail


【解决方案1】:

不久前我问了一个类似的问题,看看它有很好的答案。

How can I start ajax push website (activemq or cometd or something else)?

【讨论】:

    【解决方案2】:

    Gmail 使用Comet 方法的变体。我不确定具体细节,但我相信这是在<script> 标签或<iframe> 中运行的某种长轮询。 Wikipedia article on Comet 有更多细节。

    【讨论】:

      【解决方案3】:

      【讨论】:

      • Comet 以 HTTP 开始和结束。
      【解决方案4】:

      GMAIL 确实使用 HTTP。唯一的区别是他们不做轮询,但我相信标签 http-streaming。它保持连接打开而不是关闭它并重试。

      您没有指定您正在使用哪种服务器架构,但您也可以使用BOSH(例如prosody 确实有BOSH)来实现这一点。 Strophe.js 是一个真正干净的 javascript 库来实现这一点。

      【讨论】:

        【解决方案5】:

        【讨论】:

          【解决方案6】:

          你可以考虑WebSockets

          优点:

          • 比 HTTP(或 AJAX/Comet)的开销要少得多
          • 易于在客户端实施。
          • 与 HTML5 密切相关,因此使用它可以获得“奖励积分”。 :-)

          缺点:

          • 需要支持 WebSockets 或 Adob​​e Flash 的浏览器:web-socket-js 项目提供备用 Flash 模拟器。
          • 您需要在服务器端支持 WebSockets。

          对于后端,请查看 pusherapp,它处理您要创建的应用程序类型的后端。您每天免费获得 5 个同时客户端和 10,000 条消息。

          这里是谷歌对 WebSockets 的介绍:http://blog.chromium.org/2009/12/web-sockets-now-available-in-google.html

          另外,请查看 wsproxy,它是一个 WebSockets 到通用 TCP 套接字代理,包含在 noVNC(HTML5 VNC 客户端)中。 noVNC 有一个 C 和 python 版本的 wsproxy。免责声明:我创建了 noVNC。

          【讨论】:

            猜你喜欢
            • 2015-06-15
            • 1970-01-01
            • 2016-06-27
            • 2019-12-28
            • 1970-01-01
            • 1970-01-01
            • 2011-06-22
            • 2011-03-10
            • 1970-01-01
            相关资源
            最近更新 更多