5

我正在开发一个使用 Comet Hidden iFrame 技术将数据从服务器推送到移动浏览器的 Web 应用程序。

在 Mobile Safari 上一切正常,但 Android 更痛苦。似乎需要从服务器发送 4 KB 消息才能考虑该消息。这不仅适用于第一条消息,而且适用于每条消息。

有些人尝试使用 XMLHttpRequest 流实现 Comet,但有相同的 4KB 问题 (http://code.google.com/p/android/issues/detail?id=13044)

有没有人设法在 Android 浏览器上实现 Comet 技术而无需将消息填充到 4KB?

在 Android 2.1、2.2 上测试

即使在 Android 4.0 版本http://caniuse.com/eventsource上似乎也不支持服务器发送的事件

与 websocket http://caniuse.com/websockets相同

谢谢

-seb

4

3 回答 3

2

不确定它是否有资格作为您当前问题的答案,但一般建议是使用一种面向未来的技术,该技术可以退回到相当好的polyfill

对于您的具体问题,我相信 WebSockets 是最好的技术,结合 WebSocket 服务器(node.js,Kaazing),具有良好的后备选项。我更熟悉 Kaazing:它在不兼容 WebSocket 的浏览器上提供与原生 WebSocket 性能几乎相同的性能。有关 WebSocket 仿真的更多信息,您可能会发现这篇文章对 WebSocket 仿真很有用

于 2011-11-23T07:50:05.760 回答
1

这个 4KB 缓冲区问题已经存在了很长时间,并且在桌面浏览器以及 Android Internet.app(我不知道)上仍然存在。

解决方案是使用初始连接发送一个 4KB 块。这是HTTP StreamingHTTP Long-Polling更好的解决方案的一种情况。通过流式传输,您可以在新数据可用时保持连接打开,这与关闭然后重新打开连接的长轮询不同。这种技术意味着有一个最初不幸的 4KB 无用数据块,但除此之外的所有数据都是实际数据(可用)。我已经花了好几个小时来处理这个缓冲区大小,而且它有时在 Web 浏览器之间不一致。

但是,有些公司(例如Caplin Systems)在其企业级应用程序中使用 HTTP 流,被众多金融机构使用,因此有可能使其始终如一地正常运行。

有没有人设法在 Android 浏览器上实现 Comet 技术而无需将消息填充到 4KB?

这极不可能发生。WebSockets(正如@Peter Moskovits 所指出的)是这种双向通信(目前强调推送)将在未来实现跨浏览器的方式。对于 Android,这确实意味着用户还需要在他们的设备上安装 Flash 以支持 Internet 应用程序以支持 Flash 后备技术,因为 Android 目前并不原生支持 WebSockets。

于 2011-11-23T17:39:27.570 回答
1

在 Android 上,使用浏览器和 rgd。网络套接字:

  • Firefox Mobile 支持(包括最终 RFC6455)

  • 内置浏览器不支持任何 WS(直到并包括 Android 4)

  • Chrome for Mobile(完整的 RFC6455).. 仅适用于 Android 4

于 2012-02-14T10:03:25.513 回答