【发布时间】:2014-08-01 21:59:31
【问题描述】:
我正在开发一个 UDP 服务器端的 Android 游戏,我在保持客户端同步方面遇到了一些设计缺陷。首先,一旦事件被触发,服务器将游戏状态发送到游戏房间中的每个连接的客户端。这个广播使用了可能的语义,这意味着服务器无法检测到客户端是否收到了状态。
目前保持丢包率高的客户端与服务器同步的解决方案是每个客户端每五秒向服务器发送一次ping消息,如果服务器检测到客户端最后一次ping消息超过五秒前,它将检查它是否连接到游戏室,如果是,则发送当前游戏状态。这种解决方案不是很可靠,因为它要求客户端至少丢失两条消息(接收到的游戏状态 + 发送的 ping 消息)。
还有什么更可靠的方式来处理异步?我一直在研究逻辑时钟,并考虑在每个游戏室中实现一个计数器,在每个事件中递增,然后客户可以将计数器包含在 ping 中。此解决方案的问题在于,目前很难重新实现客户端的 ping 消息架构以支持此功能。
【问题讨论】:
标签: java android networking synchronization