我正在使用GameKit.framework
,正在尝试在两部iPhone之间创建可靠通信。
我正在使用GKMatchSendDataReliable
模式发送软件包。
该文档说:
我在WiFi连接不良时遇到了一些问题。 GameKit
不会声明连接断开,但是某些程序包永远不会到达。
使用GKMatchSendDataReliable
时,我可以指望100%可靠的通信吗?还是Apple仅将奇特的名称用于他们未实现的名称?
最佳答案
我的用户还提示游戏期间某些数据可能会意外丢失。我写了一个test app并发现GKMatchSendDataReliable
并不是真正可靠的。在弱互联网连接(例如EDGE)上,某些数据包会定期丢失,而Game Center API不会有任何错误。
因此,唯一的选择是添加额外的传输层,以实现真正可靠的交付。
为此,我编写了一个简单的库:RoUTP。它保存所有已发送的消息,直到对每个接收到的消息进行确认为止,重新发送丢失的消息,并在序列中断的情况下缓冲接收到的消息。
在我的测试中,“RoUTP + GKMatchSendDataUnreliliable”的组合甚至比“RoUTP + GKMatchSendDataReliable”的组合更好(当然比纯GKMatchSendDataReliable更好,后者并不是真正可靠的)。