使用Game Center向其他匹配玩家发送数据时,您可以使用GKMatchSendDataReliable
或GKMatchSendDataUnreliable
发送数据。
我使用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
会被调用两次吗?
因为如果是这样的话,这对我的游戏来说可能是危险的,因为我收到的大多数数据都是战斗命令,这使得某人可以进行两次攻击。我需要实现某种锁定机制来识别每个数据,以确定它是否已经处理过。
答案 0 :(得分:0)
虽然网络可能会在这种情况下多次接收数据包,但Game Kit API会为您处理冗余,并且您只会收到一个回调给didReceiveData:,不存在多次调用它的风险发送的每条消息。
然而,尽管如此,安全的网络设计应始终考虑处理意外的数据包。