Websocket 游戏 - 批量或连续发送数据

Websocket Game - Sending data in bulk or in a constant stream

我正在尝试使用 Spring Websockets 开发一个小型网络游戏。我不确定向客户端发送游戏数据更新的最佳方法是什么。

在每次游戏更新结束时批量更新发送所有数据是否更好是否随着每个对象不断发送单独的数据包更好游戏更新了吗?

我在一两周前问过这个问题,但没有得到回应,所以我继续创建了一个测试游戏,并创建了项目的 3 个分支来测试这个问题。

简短回答:使用 Spring Websockets 时批量更新要快得多。

我创建的第一个分支是 "Packet Spread" 分支。它向客户端发送有关游戏世界中每个对象的数据,因为它循环遍历它们并在游戏节拍期间更新它们的属性。

我创建的第二个分支是 "Packet Blob" 分支。它收集了在一个游戏刻度内更新的所有数据,并在游戏刻度结束时以 1 次批量更新的形式发送。

我还创建了名为 "Packet Spread Threaded" 的第三个分支,它与原始 Packet Spread 分支的工作方式相同,只是它在发送之前将所有游戏数据传递到一个单独的线程。

然后我在创建和更新大量对象的基准测试中与 3 名玩家一起测试了每个分支。

数据包传播 每次游戏更新平均约 40-70 毫秒。

Packet Blob 每次游戏更新平均约 8-16 毫秒

线程化数据包传播 每次游戏更新平均 20-40 毫秒。

我认为通过 Spring Websocket 发送数据时会产生大量开销,因此发送大的单个数据包比发送多个小数据包更有效。