我正在尝试使用 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 发送数据时会产生大量开销,因此发送大型单个数据包而不是多个小数据包最终会更有效。
关于java - Websocket 游戏 - 批量或恒定流发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42082315/