1

我目前正在使用 HTML5 和 Javascript实现一个带有Phonegap的跨平台移动应用程序。我决定使用Websockets与我们的后端服务器建立连接,以进行通信和交换数据。默认情况下,Blackberry 和 iOs 浏览器支持 Websocket。对于Android,有一些很有前途的插件可以将 websockets 集成到 Android java 代码中,并使用 Javascript 在 Phonegap 中执行它。我选择了这个:

websocket-android-phonegap

我将该插件集成到我的 android 项目中,并遵循自述文件中的每一步。然后我在装有 Android 4.0.3 的物理设备三星 Galaxy Nexus 上对其进行了测试。它运行良好,与黑莓和 iO 的使用没有明显差异。我还将应用程序部署到三星 Galaxy Tab 2

好吧,如果我将应用程序部署到操作系统版本高于 4.0.3 的 Android 设备(4.1.2 和 4.2.2 上的 testet),就会出现我的问题。如果我使用带有 Android 4.2.2 的三星 Galaxy Nexus,它甚至会出现问题!

有趣的是,我使用 Phonegap 2.6.0,它会自动创建基于操作系统版本 4.2.2 的 Android 项目!

问题是,项目的本机 Android 部分内的 Websocket 服务器无法打开与请求客户端的连接。通常客户端发送一个打开连接的请求,服务器通过回调通知客户端连接已经建立。

如果使用 Android 4.0.4+,服务器连接会返回 404 BAD REQUEST 消息,而不是打开连接。

由于这个问题,我尝试了其他一些插件,实际上我能找到的每一个插件。所有这些都在 Android 4.0.3 上运行良好,在更高版本上都没有。

试过 websocket-plugin 2

试过 websocket-plugin 3

试过 websocket-plugin 4

试过 websocket-plugin 5

有没有人在那个特定主题上有任何经验,可以给我一个提示,我可能忘记了什么或我必须考虑哪些点?我无法想象没有适用于 Android 4.0.4+ 的工作 websocket 插件可用!

4

2 回答 2

1

这里可能有 2 个问题:该库没有长时间更新,并且只实现了 WebSocket 协议的过时版本。其次,最近的 Android 版本不允许在主/UI 线程上进行任何网络活动。

AutobahnAndroid实现 RFC6455 WebSocket 并在后台线程上执行所有网络活动。不过,Phonegap 没有任何集成。

免责声明:我是 Autobahn 的原作者,为 Tavendo 工作。

于 2013-06-12T13:10:53.933 回答
0

我也遇到了类似的问题,可以通过两种方式解决:

  • 如果有可能进行长轮询的后备,它将正常工作。试试这个。我不推荐,因为这将是技术降级。

  • 在具有 Android 版本 4.1 和 4.2 的三星和 LG 设备上,webSockets 的实现存在错误。这是我的测试结果,如果您可以检查具有相同版本的 Google 设备(Nexus),它应该可以工作。为了消除此错误,您需要在通过 webSocket 连接时设置超时。

您可以参考以下链接以供参考:

链接1:https ://github.com/zotonic/zotonic/issues/569 链接2:https ://github.com/Modernizr/Modernizr/issues/1399

于 2015-08-20T23:26:18.863 回答