在iPhone之间传输数据的最佳选择

我想设置一个客户端 – 服务器架构,用于在多个iPhone之间传输数据。 例如,’服务器’iPhone拥有动物的主列表。 任意数量的客户端iPhone可以连接到服务器iPhone,然后读取和编辑列表。 我试过的一些方法:

  • 多路连接 – 仅支持最多8个客户端。 如果有办法解决这个问题,那正是我正在寻找的
  • GameKit – 我已经读过,当处理多个客户端时,蓝牙连接可能会出错
  • BLE – 蓝牙的特征值限制为512个八位字节。 我假设存档的动物列表可能会增长到大于最大特征值。
  • 套接字 – 我宁愿不必依赖外部服务器

我愿意接受’hacky’解决方案。 我想把每只动物作为一个独立的特征进行广播,但这可能会减慢发现速度,我觉得它会引起一些其他的麻烦。 任何帮助将不胜感激

Multipeer Connectivity每个会话仅支持8个对等,但它支持多个会话。 在您的情况下,如果单个“服务器”设备具有许多客户端,并且客户端不需要彼此看到,则“服务器”可以根据需要创建新会话。

因此,如果“服务器”对等方充当广告客户并接受邀请,请使用返回现有会话或创建新会话的方法:

- (MCSession *)availableSession { //Try and use an existing session (_sessions is a mutable array) for (MCSession *session in _sessions) if ([session.connectedPeers count] 

然后我有这个发送方法:

 - (void)sendData:(NSData *)data toPeers:(NSArray *)peerIDs reliable:(BOOL)reliable error:(NSError *__autoreleasing *)error { if ([peerIDs count]==0) return; NSPredicate *peerNamePred = [NSPredicate predicateWithFormat:@"displayName in %@", [peerIDs valueForKey:@"displayName"]]; MCSessionSendDataMode mode = (reliable) ? MCSessionSendDataReliable : MCSessionSendDataUnreliable; //Need to match up peers to their session for (MCSession *session in _sessions){ NSError __autoreleasing *currentError = nil; NSArray *filteredPeerIDs = [session.connectedPeers filteredArrayUsingPredicate:peerNamePred]; [session sendData:data toPeers:filteredPeerIDs withMode:mode error:&currentError]; if (currentError && !error) *error = currentError; } } 

当然可以对这种方法进行性能优化,但是对于我向同行发送数据的频率,这已经足够好了。