使用可靠模式时,GC是否可以多次接收相同的数据?

时间:2014-01-26 09:46:31

标签: ios objective-c networking game-center gamekit

使用Game Center向其他匹配玩家发送数据时,您可以使用GKMatchSendDataReliableGKMatchSendDataUnreliable发送数据。

我使用GKMatchSendDataReliable。根据Apple的文档:

  

数据会一直发送,直到成功收到   预期收件人或连接超时。

如果您可靠地将数据从A发送到B,我认为B必须告诉A “是的,我收到了数据”。如果B未对此进行确认,则A将继续无限期地发送数据,直到B确认,对吧?

现在假设这种情况:

  • A发送数据
  • B接收数据
  • B必须告诉A数据已成功收到
    • 但是,B需要一段时间才能发送确认
    • A通知B未确认,因此A再次发送数据
    • B最后发送确认
    • A获得确认并停止

在这种情况下,从技术上讲,A发送了两次数据,即使第一个包已成功发送。 这是否意味着

-(void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString*)playerID

会被调用两次吗?

因为如果是这样的话,这对我的游戏来说可能是危险的,因为我收到的大多数数据都是战斗命令,这使得某人可以进行两次攻击。我需要实现某种锁定机制来识别每个数据,以确定它是否已经处理过。

1 个答案:

答案 0 :(得分:0)

虽然网络可能会在这种情况下多次接收数据包,但Game Kit API会为您处理冗余,并且您只会收到一个回调给didReceiveData:,不存在多次调用它的风险发送的每条消息。

然而,尽管如此,安全的网络设计应始终考虑处理意外的数据包。