12

我正在使用,GameKit.framework并且正在尝试在两部 iPhone 之间建立可靠的通信。

我正在使用该GKMatchSendDataReliable模式发送包裹。

文档说:

GKMatchSendDataReliable

数据会持续发送,直到目标接收者成功接收或连接超时。可靠的传输是按照它们发送的顺序传递的。当您需要保证交货时使用它。

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

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

使用时我可以指望 100% 可靠的通信,GKMatchSendDataReliable还是 Apple 只是为他们没有实现的东西使用花哨的名称?

4

2 回答 2

1

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

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

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

于 2013-07-07T11:02:01.917 回答
0

它几乎 100% 可靠,但有时可能不是您需要的……例如,您从网络中掉线,您通过 GKMatchSendDataReliable 发送的所有内容将按照您发送它们的顺序发送。例如,这对于回合制游戏来说非常棒,但如果需要快速反应,网络退出不会忘记错过的包裹,他会得到所有现在迟到的包裹,直到他再次进入实时状态。

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

于 2012-08-31T13:26:56.567 回答