为什么我在 websocket 上收到 bad/scrambled/garbled 短信?

Why do I receive a bad/scrambled/garbled text message on websocket?

我有一个基于 Jetty(v 9.3.6) 的 websocket 服务器。 有时我会收到一条杂乱无章的短信,它是由 2 条单独的短信组合而成的。 我从客户端发送到服务器的所有消息都是 JSON 格式。

例如我有这 2 条分开的消息:

{"a":"b","c":"d"}

{"e":"f","g":"h"}

有时(不总是)我会收到这样的信息:

"b","c":"d"}

"b""g":"h"},"c":"d"}

它要么是不完整的消息,要么是 2 条不同的不完整消息的组合。

当 JSON 解析器开始抛出字符串解析错误时,我注意到了这个错误。

注意:我试过但未能在本地主机上模拟它。在我有大约 600-1k 连接的客户端和大约 100k+ 消息/天发送的生产服务器上,此错误出现在已发送消息总数的 0.5-1% 上。

注意 2:客户端是网络浏览器(Chrome、Firefox 等)

确认您 permessage-deflate 处于活动状态。

如果你这样做了,那么你就遇到了 bug 485469 ("permessage-deflate extension causes protocol error in Firefox/Chrome")

要么禁用 permessage-deflate,要么升级到 Jetty 9.3.7.v20160115