我在Peer模式下使用GKSession,其中app的实例既是服务器又是客户端。
我连接到这样的其他同行:
- (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];
}
如果我有一台运行应用程序的设备然后启动另一台运行应用程序的设备,则两台设备都会看到对方并发送-connectToPeer:withTimeout:。
我不明白的是,如果只希望相互连接的两个设备中的一个发送connectToPeer:withTimeout:请求是否需要双向通信就足够了。
然后,我担心双向连接请求会导致麻烦。这样可以盲目地这样做,还是我必须使用更复杂的检查,以便在一对同伴之间只建立一个连接?
编辑:测试显示ONE对象连接到另一个对等体就足够了。还测试了每个对等体将看到另一个对等体变得可用。所以我上面的代码将提出一个多余的连接请求。问题仍然存在,如果这对网络的稳定性和容量有害。