Safari浏览器是否支持Http Streaming Comet?

10
通过HTTP Streaming Comet,我指的是“永久iframe”/“永久xhr”变化,它们在从服务器推送数据后不关闭连接,而不是标准轮询和长轮询,它们会为每个服务器推送事件关闭并重新发送新请求。
我查看了dojo.io.cometd包,似乎他们只有轮询实现。我也找到了这个示例,但即使经过一些调整,它在webkit中似乎仍然无法工作(我在其他地方都可以)。这篇来自Safari博客的公告似乎表明它可能使用xhr实现,但我找不到任何代码或文档,也无法让它工作。
是否有人知道在Webkit浏览器(Safari和Chrome)中实现HTTP streaming comet的技术、脚本、库或演示?
更新
经过更多的调整,我发现要想通过XHR在Safari中实现HTTP streaming,需要做两件事情:
响应需要具有Content-Type:multipart/x-mixed-replace 在浏览器开始持续显示更新之前,响应需要发送一些“噪音”字符。我认为这与填充某些内部缓冲区有关。
更新2
最终,我使用iframe技术在所有浏览器中都让它工作了。解决方案的警告是,只有基于WebKit的浏览器应该接收multipart/x-mixed-replace标头。

没有"multipart/x-mixed-replace",你仍然可以让HTTP流在Safari中工作。你只需要自己进行解析。 - Morgan Cheng
@Leo:你能否分享一下使得Http Streaming在所有浏览器中可用的代码片段?这对我和社区来说应该很有用。谢谢。 - ManKum
4个回答

4
根据维基百科,每个浏览器都可以实现HTTP流式传输。该信息引用了参考书《Ajax:权威指南》(O'Reilly Media, pp. 320. ISBN 0596528388),因此这本书可能有关于如何实现的建议。
此外,http://meteorserver.org/上有一个演示,我刚在Chrome中确认过它可以工作,其中包括客户端库和服务器将数据推送到客户端。

3

这是完全可以实现的:GMail就做到了。如果你观察最新Webkit开发工具中的资源部分,你就可以看到它的实际效果。他们有一个名为“bind”的请求,它基本上会一直保持打开状态。我的理解是,当新邮件到达时,它将通过该连接传输。


3

是的。

为了让Safari正常工作,您需要在响应的开头包含大量(至少256字节)的垃圾内容。(请参考此链接)


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接