Multipeer Connectivity框架,最多可支持45个设备

时间:2013-10-20 15:37:56

标签: ios multipeer-connectivity

我希望使用Multipeer Connectivity框架,并感谢任何有关如何最好地进行的经验的声音。

我需要在“教练”设备和最多45个“播放器”设备之间建立连接。它们都将在同一个空间,但无法预测无线网络的可用性或连接。教练设备需要每秒向所有播放器设备发送指令(小数据包)。每个“玩家”需要每秒将蓝牙心率监视器(非常小的数据包)的读数发送回教练。由于每个会话的最大同等数是8,这些想法中的任何一个都可以满足我需要的数字吗?

a)与教练建立联系的前7个玩家设备宣传不同的会话类型,并允许7个(或者这将是6个?)更多的玩家加入他们。那些前7名作为其他49名(或42名?)的中间人,通过传递教练的指示并将收集的读数传回给教练。指令和心率读数之间的几秒钟滞后不是首选,但可以。

b)教练设备创建并通告一​​个会话。在连接了7个播放器设备后,教练设备会创建另一个会话并重复7次。重复,直到所有玩家设备都连接到教练。这似乎不太可行,但如果不了解Multipeer Connectivity的魔力,它就会浮现在脑海中。

c)教练与玩家设备1建立会话,该会话连接到设备2 ...在菊花链地形中。当每个设备接收到指令时,它会将自己的读数添加到数据包并发送。最后一个设备将整个数据包返回给教练。我无法预测一轮数据需要多长时间,如果一台设备离开该组,它似乎也很麻烦。

对于使用45个左右设备的Multipeer Connection Framework有任何建议或经验,我们将不胜感激。

4 个答案:

答案 0 :(得分:8)

我最近一直在思考类似的东西,如果你不需要'玩家'互相沟通,我会说你的情况b)是你最好的选择。

Multipeer Connectivity支持多个会话,因此您可以拥有一个用于会话对象的数组,作为“教练”进行宣传,并且如果每个已发现的玩家具有容量或创建新会话,则会邀请他们加入最新会话。

您的播放器对象可以保留对会话和peerID的引用以用于发送数据,并且可以保留映射到相应播放器对象的peerID displayNames的字典以处理传入数据。

这样你在给定的'玩家'和'教练'之间也没有跳跃,不像a)和c)。

显然,真正的技巧是测试。我自己没有8个以上的设备,我仍然不确定我将如何测试自己的实现!

修改

我在这里用实际代码回答了类似的问题:Best option for streaming data between iPhones

答案 1 :(得分:4)

我知道这是一个老问题。 我之前遇到同样的问题(并且在没有明确答案的情况下问过类似的问题)。

我测试过的事情和面临的问题:

  1. "正常方式" - 一次会议。

    • 问题:最多8台设备。
  2. 每个会话放置6个设备的会话数组(以避免最多8个)

    • 问题:太多过热,内存和CPU消耗。当多个会话中的多个设备一次断开连接时,重新接收可能需要很长时间才能确定。
  3. 这是最复杂的方式。

    步骤:

    1. 我们创建会话并允许最多4到5个客户端。
    2. 每次连接客户端时,他都会创建一个具有相同条件的组。
    3. 当我们达到最大客户数(4 - 5,具体取决于您的实施)时,我们会停止投放广告。
    4. 新客户将像细胞一样彼此连接。诀窍是有一些方法来决定新客户端需要连接到优先级的命令,并创建一种方法来向客户端会话重新发送流量到服务器复制器"之一。
  4. 最后一种方法的唯一问题是它是最复杂的,您需要一些数学铅笔和纸张来决定如何互连客户并重新发送流量。

答案 2 :(得分:0)

您可以使用此https://github.com/jdiehl/async-network#request-based-networking

代替MultiPeer连接框架

答案 3 :(得分:-6)

默认值为8,它不是最大值,

你的问题吓到了我,因为我还需要超过8个!

下面必须纠正错误。

maximumNumberOfPeers 会话中允许的最大对等体数,包括本地对等体。 @property(assign,nonatomic)NSUInteger maximumNumberOfPeers 讨论 最大允许值(和默认值)为8.

https://developer.apple.com/library/ios/documentation/MultipeerConnectivity/Reference/MultipeerConnectivityFramework/MultipeerConnectivityFramework.pdf