是否有必要压缩较短的 Websocket 消息?

Is it necessary to compress short Websocket messages?

我正在开发一个使用 Websocket 进行通信的游戏项目。后端是一个 Spring 启动应用程序。现在,示例消息如下所示:

{"type":"EnemyHpChange","id":0,"value":-5}

如您所见,消息可以很容易地缩短为二进制的 2 个字节,可能使用 6 位的消息类型,2 位的 id 等

我对减少延迟很感兴趣,因为这是一款游戏,但是像这样压缩消息能加快多少速度?

有两点需要考虑:

  1. 就理论而言,网络延迟可能不会受到影响,而避免 JSON 解析器可能会在感知延迟方面产生预期的效果。

  2. 只有测试才能正确观察性能变化。理论很好,但背后有复杂的优化,它们会产生无法预料的效果。

网络延迟

该理论背后的原因是 TCP/IP 数据包的 MTU。两条消息很可能都放在一个数据包中,因此网络层的行为可能相同。

另一方面,如果您有很多消息,则可以在同一个数据包中容纳更多消息,从而优化网络流量(这仍然值得怀疑,因为这取决于消息频率)。

我不确定,但据我所知,实际的 MTU 值通常在 500 字节左右或更少。

解析器延迟

另一方面,一旦客户端获取数据,二进制数据通常比 JSON 更快更容易解析。

这些消息非常短,但内存消耗和解析速度仍然可能会影响客户端的感知延迟。

请注意,感知延迟不会改变网络延迟,但会改变客户端的响应速度以及事件转化为感知状态变化的速度。