java - Websocket 游戏 - 批量或恒定流发送数据

标签 java websocket spring-websocket

我正在尝试使用 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/

相关文章:

multithreading - 无法连接时停止 channel

java - android java mediaplayer 服务 - 我怎么知道 mediaPlayer 是否准备好了?

iframe - 试图弄清楚为什么谷歌分析报告的用户比我们自己的堆栈多

http - HTML5 Websocket HTTP 认证失败;没有可用的有效凭据

java - 在WebSocketHandler中访问HTTP session (Spring-websocket)

spring-boot - ReactorNettyWebSocketClient 使用示例

java - spring websockets - 是否可以向离线用户发送消息?

java - MySql jdbc 驱动程序加载为版本 3 而不是版本 4

java - 如何在 spring xml 之外设置 SqlMapClient

java - 使用递归获取 2 个数字的乘积和商,而不使用 * 和/运算符