我为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文档似乎并未在文档中指出存在超时。
谢谢
答案 0 :(得分:1)
可靠的消息只是可靠。 onRealTimeMessageSent
回调可靠消息的用例并不多,因为正如您所说,它并不能保证收件人已经处理了消息。只是发送了它。
这看起来很烦人,但基于ACK的系统是确保用户收到消息的最佳方式。 UUID是一种很好的方法。我自己做了这个并发现它很好用(虽然现在你有往返延迟)。
就超时而言,这并未在RealTime Messaging API中实现。我个人发现往返延迟(发送消息,在回调中接收ACK)大约是200ms,而且我从来没有找到一种方法来使消息最终无法提供,即使故意使用恶劣的网络条件。