10

通过 HTTP Streaming Comet,我的意思是“永久 iframe”/“永久 xhr”变体,在从服务器推送数据后不会关闭连接,而不是标准轮询和长轮询,后者关闭并重新发送新请求每个服务器推送事件。

我查看了 dojo.io.cometd 包,似乎它们只有轮询实现。我也找到了这个例子,但即使经过相当多的修改,它似乎也不能在 webkit 中工作(我让它在其他任何地方工作)。来自 safari 博客的这个公告似乎表明 xhr 是可能的,但我找不到任何代码或文档,也无法让它工作。

有谁知道在 Webkit 浏览器(Safari 和 Chrome)中实现 HTTP 流彗星的技术、脚本、库或演示?

更新

经过一番修改后,我发现需要做两件事才能让 http 流通过 XHR 在 Safari 中工作:

  • 响应需要有一个 Content-Type: multipart/x-mixed-replace
  • 在浏览器开始一致地显示更新之前,响应需要发送一些“噪音”字符。我假设这与填充一些内部缓冲区有关。

更新 2

我终于使用 iframe 技术让它在所有浏览器中工作。该解决方案需要注意的是,只有基于 WebKit 的浏览器才能接收 multipart/x-mixed-replace 标头。

4

4 回答 4

4

根据 Wikipedia 的说法,HTTP Streaming comet 应该可以在每个浏览器中使用。“带有非框架的页面布局”,Ajax:权威指南。O'Reilly Media, pp. 320. ISBN 0596528388 是引用此信息的参考资料,因此本书可能对如何执行此操作有建议。

http://meteorserver.org/也有一个演示,我刚刚确认它在 Chrome 中工作,客户端库 + 一个将数据推送到客户端的服务器。

于 2008-10-09T23:00:56.120 回答
3

这绝对是可能的:GMail 做到了。如果您观看最新 Webkit 中开发人员工具的参考资料部分,您可以观看它的实际操作。他们有一个称为“绑定”的请求,该请求或多或少无限期地保持打开状态。我的理解是,当新邮件到达时,它会遇到这种联系。

于 2008-10-10T07:16:24.963 回答
3

是的。

您需要在响应的前面包含大量(至少 256 字节)垃圾,以使 Safari 正常运行。

于 2008-11-14T15:49:45.633 回答
0

虽然这是一篇旧帖子,但我确实做了一些搜索,发现以下文章非常有帮助 http://www.shanison.com/2010/05/10/stop-the-browser-%E2%80%9Cthrobber-of- doom%E2%80%9D-while-loading-comet-forever-iframe/

于 2010-05-10T15:23:01.063 回答