Android浏览器的备用服务器Push / Comet实现,不发送4KB消息?

时间:2011-11-22 22:33:08

标签: android websocket comet server-push http-streaming

我正在开发一个使用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

3 个答案:

答案 0 :(得分:2)

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

对于您的具体问题,我认为WebSockets是最好的技术,与WebSocket服务器(node.js,Kaazing)结合使用,具有良好的后备选项。我对Kaazing更熟悉:它在非WebSocket兼容的浏览器上提供与本机WebSocket性能几乎相同的性能。 有关WebSocket仿真的更多信息,您可能会发现this post useful on WebSocket emulation

答案 1 :(得分:1)

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

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

但是,像Caplin Systems这样的公司在其企业级应用程序中使用HTTP Streaming,被许多金融机构使用,因此可以使其始终如一地工作。

  

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

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

答案 2 :(得分:1)

在Android上,使用浏览器和rgd。的WebSockets:

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

  • 内置浏览器不支持WS(最多包括Android 4)

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