【问题标题】:Handling desynchronization处理去同步
【发布时间】:2014-08-01 21:59:31
【问题描述】:

我正在开发一个 UDP 服务器端的 Android 游戏,我在保持客户端同步方面遇到了一些设计缺陷。首先,一旦事件被触发,服务器将游戏状态发送到游戏房间中的每个连接的客户端。这个广播使用了可能的语义,这意味着服务器无法检测到客户端是否收到了状态。

目前保持丢包率高的客户端与服务器同步的解决方案是每个客户端每五秒向服务器发送一次ping消息,如果服务器检测到客户端最后一次ping消息超过五秒前,它将检查它是否连接到游戏室,如果是,则发送当前游戏状态。这种解决方案不是很可靠,因为它要求客户端至少丢失两条消息(接收到的游戏状态 + 发送的 ping 消息)。

还有什么更可靠的方式来处理异步?我一直在研究逻辑时钟,并考虑在每个游戏室中实现一个计数器,在每个事件中递增,然后客户可以将计数器包含在 ping 中。此解决方案的问题在于,目前很难重新实现客户端的 ping 消息架构以支持此功能。

【问题讨论】:

    标签: java android networking synchronization


    【解决方案1】:

    听起来您将在解决问题的过程中重新发明大部分 TCP。我不确定你为什么首先选择 UDP,但如果可能的话,你最好使用常规 TCP 套接字。

    【讨论】:

    • 由于性能下降,我对使用 TCP 不感兴趣。
    • 如果您还没有,我强烈建议您测量实际差异并让自己相信这确实是一个令人兴奋的事情。解决可靠消息传递问题所需的开发人员时间量是巨大的,性能差异不太可能值得额外的开发时间。
    • 好吧,那么这一切都归结为服务器的当前架构。它的开发理念是为每个请求使用一个线程池,它不直接跟踪连接的客户端。不过还是谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 2021-09-11
    • 2019-10-27
    • 2018-01-09
    • 2012-10-27
    • 2020-12-06
    相关资源
    最近更新 更多