我希望使用Multipeer Connectivity框架,并感谢任何有关如何最好地进行的经验的声音。
我需要在“教练”设备和最多45个“播放器”设备之间建立连接。它们都将在同一个空间,但无法预测无线网络的可用性或连接。教练设备需要每秒向所有播放器设备发送指令(小数据包)。每个“玩家”需要每秒将蓝牙心率监视器(非常小的数据包)的读数发送回教练。由于每个会话的最大同等数是8,这些想法中的任何一个都可以满足我需要的数字吗?
a)与教练建立联系的前7个玩家设备宣传不同的会话类型,并允许7个(或者这将是6个?)更多的玩家加入他们。那些前7名作为其他49名(或42名?)的中间人,通过传递教练的指示并将收集的读数传回给教练。指令和心率读数之间的几秒钟滞后不是首选,但可以。
b)教练设备创建并通告一个会话。在连接了7个播放器设备后,教练设备会创建另一个会话并重复7次。重复,直到所有玩家设备都连接到教练。这似乎不太可行,但如果不了解Multipeer Connectivity的魔力,它就会浮现在脑海中。
c)教练与玩家设备1建立会话,该会话连接到设备2 ...在菊花链地形中。当每个设备接收到指令时,它会将自己的读数添加到数据包并发送。最后一个设备将整个数据包返回给教练。我无法预测一轮数据需要多长时间,如果一台设备离开该组,它似乎也很麻烦。对于使用45个左右设备的Multipeer Connection Framework有任何建议或经验,我们将不胜感激。
答案 0 :(得分:8)
我最近一直在思考类似的东西,如果你不需要'玩家'互相沟通,我会说你的情况b)是你最好的选择。
Multipeer Connectivity支持多个会话,因此您可以拥有一个用于会话对象的数组,作为“教练”进行宣传,并且如果每个已发现的玩家具有容量或创建新会话,则会邀请他们加入最新会话。
您的播放器对象可以保留对会话和peerID的引用以用于发送数据,并且可以保留映射到相应播放器对象的peerID displayNames的字典以处理传入数据。
这样你在给定的'玩家'和'教练'之间也没有跳跃,不像a)和c)。
显然,真正的技巧是测试。我自己没有8个以上的设备,我仍然不确定我将如何测试自己的实现!
修改强>
我在这里用实际代码回答了类似的问题:Best option for streaming data between iPhones
答案 1 :(得分:4)
我知道这是一个老问题。 我之前遇到同样的问题(并且在没有明确答案的情况下问过类似的问题)。
我测试过的事情和面临的问题:
"正常方式" - 一次会议。
每个会话放置6个设备的会话数组(以避免最多8个)
这是最复杂的方式。
步骤:
最后一种方法的唯一问题是它是最复杂的,您需要一些数学铅笔和纸张来决定如何互连客户并重新发送流量。
答案 2 :(得分:0)
您可以使用此https://github.com/jdiehl/async-network#request-based-networking
代替MultiPeer连接框架答案 3 :(得分:-6)
默认值为8,它不是最大值,
你的问题吓到了我,因为我还需要超过8个!
下面必须纠正错误。
maximumNumberOfPeers 会话中允许的最大对等体数,包括本地对等体。 @property(assign,nonatomic)NSUInteger maximumNumberOfPeers 讨论 最大允许值(和默认值)为8.