1

我在对等模式下使用 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];
}

如果我有一台设备运行该应用程序,然后启动另一台运行该应用程序的设备,两台设备将看到对方并发送 -connectToPeer:withTimeout:。

我不明白的是,如果需要双向通信,两个希望相互连接的设备中只有一个发送 connectToPeer:withTimeout: 请求是否就足够了。

然后,我担心双向连接请求会造成麻烦。像这样盲目地这样做可以吗,还是我必须使用更复杂的检查,以便在一对对等点之间只建立一个连接?

编辑:测试显示一个对等点连接到另一个对等点就足够了。还测试了每个对等点是否会看到另一个对等点变得可用。所以我上面的代码会发出一个多余的连接请求。问题仍然存在,这是否对网络的稳定性和容量有害。

4

0 回答 0