sendReliable消息有时不会被对方收到

时间:2014-11-29 07:24:32

标签: google-play-games

我为Google Play游戏服务创建了一个实时游戏。它现在处于后期的alpha阶段。我有关于sendReliableMessage的问题。我注意到其他对等方没有收到消息的某些情况。我知道有一个回调onRealTimeMessageSent,我的MainActivity中有一些代码:

@Override
public void onRealTimeMessageSent(int i, int i2, String s) {
    if(i== GamesStatusCodes.STATUS_OK)
    {

    }
    else
    {
        lastMessageStatus=i;
        sendToast("lastMessageStatus:"+Integer.toString(lastMessageStatus));
    }
}

我的游戏渲染循环是每次迭代检查lastMessageStatus的值,如果除了STATUS_OK之外还有其他东西我现在正在画一个T-Rex。

我的问题是检查发送状态真的够吗?我还可以创建源代码,其中发送方必须等待已确认的消息。每条消息都会标记一个UUID,如果在超时内没有收到确认,那么发送方会再次发送消息?基于ACK的系统是否需要创建持久连接?<​​/ p>

我注意到在对方收到可靠消息之前存在一些延迟的某些情况,我想知道sendReliable消息是否有超时? Google Play Services文档似乎并未在文档中指出存在超时。

谢谢

1 个答案:

答案 0 :(得分:1)

可靠的消息只是可靠onRealTimeMessageSent回调可靠消息的用例并不多,因为正如您所说,它并不能保证收件人已经处理了消息。只是发送了它。

这看起来很烦人,但基于ACK的系统是确保用户收到消息的最佳方式。 UUID是一种很好的方法。我自己做了这个并发现它很好用(虽然现在你有往返延迟)。

就超时而言,这并未在RealTime Messaging API中实现。我个人发现往返延迟(发送消息,在回调中接收ACK)大约是200ms,而且我从来没有找到一种方法来使消息最终无法提供,即使故意使用恶劣的网络条件。