我目前正在通过 Phonegap 使用 HTML5 和 Javascript 实现跨平台移动应用程序。我决定使用 Websockets 与我们的后端服务器建立连接以进行通信和交换数据。 Blackberry 和 iOs 浏览器默认支持 Websockets。对于 Android,有一些很有前途的插件可以将 websockets 集成到 Android java 代码中,并使用 Javascript 在 Phonegap 中执行它。 我选择了这个:
我将该插件集成到我的 android 项目中,并按照自述文件中的每一步进行操作。然后我在 Android 4.0.3 的物理设备 Samsung Galaxy Nexus 上测试了它。它运行良好,与 Blackberry 和 iOs 的使用没有明显差异。我还将该应用程序部署到 Samsung Galaxy Tab 2
好吧,如果我将应用程序部署到操作系统版本高于 4.0.3 的 Android 设备(在 4.1.2 和 4.2.2 上进行测试),就会出现问题。如果我使用 Android 4.2.2 的 Samsung Galaxy Nexus 甚至会出现问题!
有趣的是,我使用 Phonegap 2.6.0,它会自动创建基于操作系统版本 4.2.2 的 Android 项目!!
问题是,项目的 native Android 部分内的 Websocket 服务器无法打开与请求客户端的连接。通常情况下,客户端发送一个请求打开连接,服务端通过回调通知客户端连接已经建立。
如果使用 Android 4.0.4+,服务器连接将返回 404 BAD REQUEST 消息,而不是打开连接。
由于这个问题,我尝试了一些其他的插件,实际上是我能找到的每一个插件。他们都在 Android 4.0.3 上运行良好,在更高版本上没有。
有没有人在该特定主题方面有任何经验,可以给我提示,我可能忘记了什么或我必须考虑哪些要点?我无法想象没有适用于 Android 4.0.4+ 的可用 websocket 插件可用!
最佳答案
这里可能有 2 个问题:该库很长时间没有更新,并且只实现了一个过时版本的 WebSocket 协议(protocol)。其次,最近的 Android 版本不允许在主/UI 线程上进行任何网络 Activity 。
AutobahnAndroid实现 RFC6455 WebSocket 并在后台线程上执行所有 网络 Activity 。虽然没有与 Phonegap 的任何集成。
免责声明:我是 Autobahn 的原作者,为 Tavendo 工作。
关于android - Android 版本 >4.0.3 的 Phonegap websocket 插件无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17064815/