我正在开发一个使用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
答案 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 Streaming比HTTP 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