WebSockets 在桌面浏览器中工作,但在 Chrome for Android 中失败

Dre*_*kes 5 google-chrome websocket libwebsockets

我有一个通过 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 中失败?

Dre*_*kes 3

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

我不知道这是否是 Android 版 Chrome 中的一个错误,或者桌面版本是否容忍某些违反其移动版本不会容忍的规范的行为。我怀疑是前者。

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