5

我有一个通过 WebSockets 连接到服务的网络应用程序。此应用程序在桌面版 Chrome/Firefox 中运行良好,但移动版 Chrome 出现错误:

WebSocket 连接到“ws://192.168.0.11:8080/”失败:一个或多个保留位打开:reserved1 = 0,reserved2 = 1,reserved3 = 0

服务器使用最新版本的libwebsockets

此错误发生在初始连接期间,随后通过多个 2048 字节帧向客户端发送了大量的 JSON 数据。

服务器公开了几个不同的 WebSocket。其中一些也以其他方式失败:

无法将文本帧解码为 UTF-8。

...和...

无法识别的帧操作码:6

预测哪个应该失败,哪个应该成功的模式还没有显现出来。

我怀疑这里存在某种框架问题。我已经查看了 WireShark 中的消息,它们对我来说是正确的。标题似乎是正确的。

为什么这可以在桌面 Chrome/Firefox 中工作,但在 Android 版 Chrome 中失败?

4

1 回答 1

3

WireShark数据包捕获显示有一些帧溢出了两个 TCP 数据包。错误消息的变化表明随机有效负载被解释为标头。我修改了我的服务器以使最大数据包大小为 1024 字节而不是 2048 字节,从而抑制了该错误。

我不知道这是否是 Android 版 Chrome 中的一个错误,或者桌面版是否允许违反其移动表亲不会的规范。我怀疑是前者。

编辑在我的平板电脑上,我还能够通过进入chrome://flags并启用实验性 WebSocket 支持来解决这个问题。

于 2014-03-31T10:24:08.263 回答