GameKit的通信与GKMatchSendDataReliable一起可靠吗?

时间:2012-08-23 10:58:40

标签: objective-c ios game-center gamekit

我正在与GameKit.framework合作,并尝试在两部iPhone之间建立可靠通讯。

我使用GKMatchSendDataReliable模式发送包裹。

文档说:

  

GKMatchSendDataReliable

     
    

数据会一直发送,直到目标收件人成功收到或连接超时为止。     可靠的传输按发送顺序传送。当您需要保证交货时,请使用此选项。

         

适用于iOS 4.1及更高版本。在GKMatch.h中声明。

  

我在WiFi连接不良时遇到了一些问题。 GameKit没有声明连接丢失,但有些软件包永远不会到达。

使用GKMatchSendDataReliable时,我可以指望100%可靠的通信吗?或者Apple是否只使用花哨的名称来实现他们没有实现的内容?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

它几乎100%可靠,但有时可能不是你需要的...例如,你退出网络所有通过GKMatchSendDataReliable发送的东西都将按你发送的顺序发送。 例如,这对于回合制游戏来说非常棒,但是如果需要快速反应,网络的辍学不会忘记错过的包裹,他会得到所有现在已经很晚的包裹,直到他再次实时出现。

GKMatchSendDataReliable不发送数据的情况是连接超时。 我认为当你关闭应用程序时也会出现这种情况