使用GKMatchSendDataReliable时为什么会丢包?

时间:2013-02-12 04:13:27

标签: ios ios6 game-center gamekit

我有一个多人iOS游戏,我正在使用GKMatchSendDataReliable发送数据。但是,偶尔会丢失数据包。我检查了发送端,我没有收到错误。我只是在接收时没有收到它。它是间歇性的,我在接收方法的开头就有NSLogs,所以我总是知道什么时候收到消息。

GKMatchSendDataReliable 100%可靠吗?必须建立我自己可靠的数据发送程序似乎是一种浪费。

似乎只有当一台设备在Verizon的LTE网络上时才会发生这种情况。我没有尝试任何其他蜂窝网络。仅使用Wi-Fi时,不一定使用相同的Wi-Fi,它可以正常工作。

3 个答案:

答案 0 :(得分:0)

这也发生在我身上。看来虽然GKMatchSendDataReliableGKMatchSendDataUnreliable更可靠(在我的测试中丢失了大约2%的数据包),GKMatchSendDataReliable似乎偶尔丢失第一个数据包我发送(连接后立即)。

答案 1 :(得分:0)

我的用户还抱怨在游戏过程中可能会意外丢失某些数据。我写了test app,并发现GKMatchSendDataReliable并不可靠。在弱互联网连接(例如EDGE)上,一些数据包经常丢失而没有来自Game Center API的任何错误。

因此,唯一的选择是添加额外的传输层以实现真正可靠的传输。

我为此编写了一个简单的lib:RoUTP。它保存所有已发送的消息,直到确认每个接收到的消息,重新发送丢失并缓冲接收到的消息,以防序列中断。 在我的测试组合中,“RoUTP + GKMatchSendDataUnreliable”甚至比“RoUTP + GKMatchSendDataReliable”更好(当然比纯粹的GKMatchSendDataReliable更好,但这并不可靠)。

答案 2 :(得分:0)

Apple声称这是一个bug并在iOS7中修复了