アプリのインスタンスがサーバーとクライアントの両方であるピア モードで GKSession を使用しています。
次のように他のピアに接続します。
- (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state {
self.currentSession = session;
if (state == GKPeerStateAvailable) {
[session connectToPeer:peerID withTimeout:0];
}
}
- (void)session:(GKSession *)session didReceiveConnectionRequestFromPeer:(NSString *)peerID {
[session acceptConnectionFromPeer:peerID error:nil];
}
アプリを実行しているデバイスが 1 つあり、アプリを実行している別のデバイスを起動すると、両方のデバイスがお互いを認識し、-connectToPeer:withTimeout: を送信します。
私が理解できないのは、双方向通信が必要な場合、相互に接続したい2つのデバイスのうちの1つだけが connectToPeer:withTimeout: リクエストを送信するだけで十分かということです。
そして、双方向の接続要求が問題を引き起こすのではないかと心配しています。このようにやみくもにこれで問題ありませんか、それともピアのペア間の接続が 1 つだけになるように、より洗練されたチェックを使用する必要がありますか?
編集:テストにより、1つのピアが他のピアに接続するだけで十分であることが明らかになりました。また、各ピアが他のピアが使用可能になるのを確認することもテストされています。したがって、上記のコードは、余分な接続要求を 1 つ作成します。これがネットワークの安定性と容量に悪影響を与えるかどうかという問題は残ります。