Objective c 是游戏套件';与GKMatchSendDataReliable的通信是否可靠?

Objective c 是游戏套件';与GKMatchSendDataReliable的通信是否可靠?,objective-c,ios,game-center,gamekit,Objective C,Ios,Game Center,Gamekit,我正在使用GameKit.framework,并试图在两部iphone之间创建一个可靠的通信 我用GKMatchSendDataReliable模式发送包 文件说: GKMatchSendDataReliable 数据将连续发送,直到预期收件人成功接收到数据或连接超时。 可靠的传输按发送顺序发送。当您需要保证交货时,请使用此选项 在iOS 4.1及更高版本中提供。在GKMatch.h中声明 我在坏的WiFi连接上遇到了一些问题。GameKit没有声明连接已丢失,但某些软件包从未到达 当使用GKM

我正在使用
GameKit.framework
,并试图在两部iphone之间创建一个可靠的通信

我用
GKMatchSendDataReliable
模式发送包

文件说:

GKMatchSendDataReliable

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

在iOS 4.1及更高版本中提供。在GKMatch.h中声明

我在坏的WiFi连接上遇到了一些问题。
GameKit
没有声明连接已丢失,但某些软件包从未到达


当使用GKMatchSendDataReliable时,我能指望100%可靠的通信吗?或者苹果只是对他们没有实现的东西使用了花哨的名字吗?

它几乎100%可靠,但有时可能不是你需要的……例如,你退出了网络,你通过GKMatchSendDataReliable发送的所有东西都会被发送进来你发给他们的订单。 例如,对于回合制游戏来说,这是非常棒的,但是如果需要快速反应,退出网络的人不会忘记错过的软件包,他会得到所有现在已经晚了的软件包,直到他再次进入实时状态

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

我的用户还抱怨说,一些数据可能在游戏过程中意外丢失。我写了一篇文章,发现
GKMatchSendDataReliable
并不真正可靠。在弱互联网连接(如EDGE)上,一些数据包会定期丢失,而游戏中心API不会出现任何错误

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

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

我从未使用过可靠模式,但在模拟器上测试GC应用时遇到了很多问题。确保你在两台设备上测试你的应用程序。我收集了与你一致的证据。我不得不承认我对此感到惊讶,更不用说对苹果公司非常失望了。我是说真的,他们之间的可靠联系是完全不可靠的?我必须在多个传输层之上的游戏层之上添加一个传输层?接下来,我们应该开始在应用程序中编写一些硬件流控制吗?自由流。