我正在与GameKit.framework
合作,并尝试在两部iPhone之间建立可靠通讯。
我使用GKMatchSendDataReliable
模式发送包裹。
文档说:
GKMatchSendDataReliable
数据会一直发送,直到目标收件人成功收到或连接超时为止。 可靠的传输按发送顺序传送。当您需要保证交货时,请使用此选项。
适用于iOS 4.1及更高版本。在GKMatch.h中声明。
我在WiFi连接不良时遇到了一些问题。 GameKit
没有声明连接丢失,但有些软件包永远不会到达。
使用GKMatchSendDataReliable
时,我可以指望100%可靠的通信吗?或者Apple是否只使用花哨的名称来实现他们没有实现的内容?
答案 0 :(得分:1)
我的用户还抱怨在游戏过程中可能会意外丢失某些数据。我写了test app,并发现GKMatchSendDataReliable
并不可靠。在弱互联网连接(例如EDGE)上,一些数据包经常丢失而没有来自Game Center API的任何错误。
因此,唯一的选择是添加额外的传输层以实现真正可靠的传输。
我为此编写了一个简单的lib:RoUTP。它保存所有已发送的消息,直到确认每个接收到的消息,重新发送丢失并缓冲接收到的消息,以防序列中断。 在我的测试组合中,“RoUTP + GKMatchSendDataUnreliable”甚至比“RoUTP + GKMatchSendDataReliable”更好(当然比纯粹的GKMatchSendDataReliable更好,但这并不可靠)。
答案 1 :(得分:0)
它几乎100%可靠,但有时可能不是你需要的...例如,你退出网络所有通过GKMatchSendDataReliable发送的东西都将按你发送的顺序发送。 例如,这对于回合制游戏来说非常棒,但是如果需要快速反应,网络的辍学不会忘记错过的包裹,他会得到所有现在已经很晚的包裹,直到他再次实时出现。
GKMatchSendDataReliable不发送数据的情况是连接超时。 我认为当你关闭应用程序时也会出现这种情况