我有一个多人iOS游戏,我正在使用GKMatchSendDataReliable
发送数据。但是,偶尔会丢失数据包。我检查了发送端,我没有收到错误。我只是在接收时没有收到它。它是间歇性的,我在接收方法的开头就有NSLogs,所以我总是知道什么时候收到消息。
GKMatchSendDataReliable
100%可靠吗?必须建立我自己可靠的数据发送程序似乎是一种浪费。
似乎只有当一台设备在Verizon的LTE网络上时才会发生这种情况。我没有尝试任何其他蜂窝网络。仅使用Wi-Fi
时,不一定使用相同的Wi-Fi,它可以正常工作。
答案 0 :(得分:0)
这也发生在我身上。看来虽然GKMatchSendDataReliable
比GKMatchSendDataUnreliable
更可靠(在我的测试中丢失了大约2%的数据包),GKMatchSendDataReliable
似乎偶尔丢失第一个数据包我发送(连接后立即)。
答案 1 :(得分:0)
我的用户还抱怨在游戏过程中可能会意外丢失某些数据。我写了test app,并发现GKMatchSendDataReliable
并不可靠。在弱互联网连接(例如EDGE)上,一些数据包经常丢失而没有来自Game Center API的任何错误。
因此,唯一的选择是添加额外的传输层以实现真正可靠的传输。
我为此编写了一个简单的lib:RoUTP。它保存所有已发送的消息,直到确认每个接收到的消息,重新发送丢失并缓冲接收到的消息,以防序列中断。 在我的测试组合中,“RoUTP + GKMatchSendDataUnreliable”甚至比“RoUTP + GKMatchSendDataReliable”更好(当然比纯粹的GKMatchSendDataReliable更好,但这并不可靠)。
答案 2 :(得分:0)