2014-01-26 39 views
0

當使用Game Center向其他比賽球員發送數據時,您可以使用GKMatchSendDataReliableGKMatchSendDataUnreliable發送數據。使用可靠模式時,GC是否可以多次接收相同的數據?

我使用GKMatchSendDataReliable。根據Apple的文檔:

數據連續發送,直到 預期收件人或連接超時成功收到。

如果您可靠地發送數據從AB,我想這B已經告訴A「是的,我接收到的數據」。如果B沒有確認,那麼A會一直髮送數據,直到B確認爲止,對吧?

現在假設這樣的場景:

  • A發送數據
  • B接收數據
  • B必須告訴A,該數據被成功接收
    • 然而,B需要一段時間才能被能夠發送確認信
    • A通知該B沒有確認,所以發送A數據再次
    • B最後發送的確認
    • A得到確認並停止

在這種情況下,在技術上,A發送數據兩次,即使第一個包已成功發送。 這是否意味着

-(void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString*)playerID 

會被調用兩次?

因爲如果是這樣的話,這會對我的遊戲造成潛在的危險,因爲我收到的大部分數據都是戰鬥命令,使得有人可能發生兩次攻擊。我需要實現某種鎖定機制來識別每個數據,以確定它是否已經處理。

回答

0

雖然網絡在該場景下可能會不止一次地接收數據包,但遊戲套件API會爲您處理冗餘,並且您只會收到一次對didReceiveData的回叫:,不會有多次調用它的風險爲每個發送的消息。

這樣說的話,安全的網絡設計應該總是處理意外的數據包。

+0

您有參考或來源嗎? – Voldemort

+0

經過測試,我是「初級iOS遊戲中心」和「遊戲套件」以及「iOS社交遊戲開始」的作者,這兩本書都深入討論了Game Center的發展。然而,官方文件沒有提到它。 –

相關問題