2012-12-12 66 views
1

我們使用GKSession來設置遊戲。這對2個設備非常有用,其中一個設備使用GKSessionModeServer和另一個GKSessionModeClient進行設置。但是,只要我們有2個或更多的客戶端(3個設備; 1個主機和2個客戶端),其中一個客戶端將在某個點隨機斷開連接。沒有錯誤處理程序被調用(didFailWithError或connectionWithPeerFailed),只有服務器和客戶端上的didChangeState。斷開通常在一分鐘內發生,有時少得多。GKSession與兩個以上的設備斷開連接

所有設備(2個iPhone和1個模擬器)在同一個無線網絡上。一個物理設備運行iOS6.0.1,另一個運行在連接模擬器時可以保持連接。只有3個設備(2個真實的,1個模擬的)發生問題。

任何幫助將不勝感激。

+0

看起來是一個GKSession實現問題:http://stackoverflow.com/questions/8378169/gksession-peer-disconnect-causes-other-peers-to-appear-disconnected/9577181#9577181 – Marco

回答

3

我有同樣的問題,但在我的應用程序中,當我連接第三個或第四個客戶端(隨機)時,會發生此問題。服務器獲取斷開連接事件,但客戶端凍結。我注意到,這總是最後一個客戶端連接數秒後斷開連接。我無法理解如何解決這個問題,我發現了一個名爲idea idea的應用程序,它通過gamekit管理客戶端/服務器連接,並且可以管理多達15個客戶端(如GameKit文檔中指定的),我測試了它並且可以正常工作。這是3天,我對代碼失去了主意,我正在考慮切換到標準套接字通信,但我將失去藍牙支持。

編輯:我找到了問題的原因。當網絡由運行iOS 6和以前的iOS版本的設備混合組成時,會發生此問題。如果網絡僅由運行iOS6的設備組成,或者只有以前的版本,則一切正常。更準確地說,這不是崩潰,但被卡住的客戶端有一些線程正在等待互斥體,這意味着GameKit會導致我們的應用程序陷入僵局。閱讀蘋果開發者論壇我已經知道一些用戶直接向蘋果公司報告了這個錯誤,但蘋果公司並沒有回答他們。因此,現在,確保基於GKSession的應用程序安全運行的唯一方法是僅支持iOS 6或從頭開始使用Bonjour,套接字和低級別的BlueTooth API編寫網絡通信系統。

+0

遇到同樣的問題 - 調試顯示應用程序凍結等待一些互斥鎖在GKSession方法內部的某處。另外,注意到它通常發生在IOS6設備上。 –

相關問題