适用于多达45个设备的Multipeer连接性框架

我希望能够使用Multipeer连接框架,并希望有关如何最好地继续进行的任何经验的声音。

我需要“教练”设备和最多45个“播放器”设备之间的连接。 他们都将在同一个空间,但没有办法预测WiFi的可用性或连接。 教练装置需要每秒向所有玩家装置发送指令(小数据包)。 每个“玩家”需要每隔一秒钟将蓝牙心率监测器(非常小的数据包)的读数发送回教练。 由于每个会话的最大对等点数是8,这些想法中的任何一个都适用于我需要的数字吗?

a)与教练build立连接的前7名球员设备宣告不同的会话types,并允许7个(或者这是6个?)更多的玩家join他们。 前7名球员通过传递教练的指示,将所收集的数据传回给教练,作为其他49人(或42人)的中间人。 指导与心读之间有几秒钟的滞后不是首选,但可以。

b)教练装置创build并通告一​​个会话。 在7个播放器设备已经连接之后,教练装置创build另一个会话并重复7次。 重复,直到所有的球员设备连接到教练。 这似乎不太可能奏效,但是如果不了解Multipeer Connectivity的魔力,那么这个想法就是一种select。

c)教练与玩家设备1build立会话,玩家设备1以菊花链forms连接到设备2 …。 当每个设备接收到指令时,它将自己的读取添加到数据包并发送。 最后一个设备将整个数据包返回给教练。 我无法预测一轮数据需要多长时间,而且如果有一个设备离开了这个组,那也似乎很麻烦。

任何build议或使用Multipeer连接框架45个左右的设备经验的声音,将不胜感激。

最近我一直在思考类似的事情,如果你不需要“玩家”来相互交stream,那么在你的情况下,我会说你最好的select。

Multipeer连接支持多个会话,所以你可以有一个会议对象的数组,广告作为“教练”,每个发现的球员要么邀请最新的会议,如果它有能力或创build一个新的。

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

这样,你也不会在给定的“玩家”和“教练”之间跳跃,这与a)和c)不同。

显然这里真正的技巧是testing。 我自己不拥有8 +设备,我仍然不知道我将如何testing我自己的实施!

编辑

我用这里的实际代码回答了一个类似的问题: 在iPhone之间stream式传输数据的最佳select

我知道这是一个古老的问题。 我以前遇到过同样的问题(并且提出了一个类似的问题,但没有明确的答案)。

我已经testing和面临的问题:

  1. “正常的方式” – 一个会话。

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

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

    脚步:

    1. 我们创build会话,并允许最多4 – 5个客户端。
    2. 每次连接客户时,他都会创build一个具有相同条件的组。
    3. 当我们达到最大的客户数量(取决于您的实施4-5),我们停止广告。
    4. 新客户将像细胞一样相互连接。 诀窍是有一些方法来决定新客户端需要连接的巫婆会话按优先级sorting,并创build一个方法来重新发送客户端会话到“服务器复制器”的stream量。

最后一种方法唯一的问题是,它是最复杂的,你需要一些铅笔和纸和平的math来决定如何你的客户interconect和重新发送您的交通。

而不是MultiPeer连接框架,你可以用这个https://github.com/jdiehl/async-network#request-based-networking

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

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

它必须被写得不好看起来更正下面。

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

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