【发布时间】:2014-03-30 23:08:24
【问题描述】:
我有一个通过 WebSockets 连接到服务的网络应用程序。此应用在桌面版 Chrome/Firefox 中运行良好,但移动版 Chrome 出现错误:
到“ws://192.168.0.11:8080/”的 WebSocket 连接失败:一个或多个保留位打开:reserved1 = 0,reserved2 = 1,reserved3 = 0
服务器使用最新版本的libwebsockets。
此错误发生在初始连接期间,因此通过多个 2048 字节帧向客户端发送了大量的 JSON 数据。
服务器公开了几个不同的 WebSocket。其中一些也以其他方式失败:
无法将文本框架解码为 UTF-8。
...和...
无法识别的帧操作码:6
预测哪个应该失败,哪个应该成功的模式还没有显现出来。
我怀疑这里存在某种框架问题。我已经查看了 WireShark 中的消息,它们对我来说是正确的。标题似乎是正确的。
为什么这在桌面版 Chrome/Firefox 中有效,但在 Android 版 Chrome 中却失败了?
【问题讨论】:
-
我已从 WireShark here for download 捕获。
-
发生这些错误是因为客户端未能正确解码帧,因此它试图从一堆位中理解,有时无法解析标头,有时位看起来像标头但是身体只是垃圾。你能强制你的应用程序一直发送 128 字节的帧然后看看吗? Chrome Android 处理部分帧的方式可能存在错误。这很有趣,请根据您的发现更新帖子。
-
@vtortola,请参阅我的答案以获取最新发现和解决方法。
标签: google-chrome websocket libwebsockets