3

我查看了 Apple 的文档,但仍然不清楚一件事,即会话。

  1. 当 - (void)advertiser:(MCNearbyServiceAdvertiser *)advertiser didReceiveInvitationFromPeer:(MCPeerID *)peerID withContext:(NSData *)contextinvitationHandler:(void (^)(BOOL, MCSession *))invitationHandler 被调用时,我们需要传入一个与邀请处理程序的会话。本届会议会发生什么?当 A 邀请 B 加入 A 创建的会话时,B 是否也向 A 提供了一个新会话?B的会话里面是什么?它只是 A 一个人,还是包括当前在 A 会话中的所有对等方?B 是否应该跟踪用于接受 A 邀请的会话?在这篇文章中,http://nshipster.com/multipeer-connectivity/,本教程会即时创建一个新会话并使用它来接受邀请,一旦功能结束,您不会丢失会话吗?从而将信息丢失给连接的对等方?

  2. 假设B、C、D都是A邀请的,现在B要给C发东西,是要求B先给A发信息,还是B可以直接给C发信息?

  3. 根据苹果的文档,一个会话只能容纳不超过 8 个同行。是否可以进行一系列会话,以便您可以邀请超过 8 人加入您的设备?如果是这种情况,客户端是否还需要使用数组进行响应,以便它可以在其列表中携带超过 8 个对等点?

  4. 假设 A 和 B 现在已连接,A 现在邀请 C 加入。B 怎么知道 C 现在在会话中?

感谢您阅读这么长的帖子。

4

3 回答 3

1

Multipeer Connectivity 的文档内容不多,因此这些答案基于我自己的实验:

  1. 这个问题中有很多问题,但简而言之,A 的会话管理 A 已发送或接受的邀请。因此,如果 B 邀请并且 A 接受,则 A 在接受时通过的会话将在MCSessionDelegate session: peer: didChangeState:回调中用于说明连接是否发生。此时connectedPeersA 的会话的属性将包含 B(如果连接成功)。一旦 A 接受,B 用来发送邀请的会话也将获得相同的回调,并且将包含 AconnectedPeers. A 和 B 都不会拥有管理它们之间的此连接的另一方会话的任何信息。是的,如果您想向新连接的对等方发送任何数据,您需要保留对处理连接的会话的引用。我还没有看到为每个邀请创建新会话的任何真正优势。

  2. 基于上述,B 没有关于 A 与谁连接的信息。因此,如果 A 连接到 B、C 和 D,则 B 唯一知道的对等点是它连接到的对等点 - A。Multipeer Connectivity 在这里提供的是 B 通过 A 发现 C 或 D 的能力。所以如果 AB通过WiFi连接,AC通过蓝牙连接,但是B没有开启蓝牙,C和B在不同的WiFi网络,B和C仍然可以通过A发现对方。邀请和接受的过程还在进行中交给 B 和 C 来处理。

  3. 我在这里回答了一个关于会话管理的问题,这可能会有所帮助iPhone 之间流式传输数据的最佳选择

  4. B 不知道 A 连接到 C 的任何事情。B 所能做的就是自己发现 C 并将 C 添加到它自己的会话中。

于 2014-04-01T17:21:54.237 回答
1
  1. 从快速查看克里斯的答案来看,我在工作中所做的工作似乎是准确的。

  2. 我目前正在开发一个使用多点连接的游戏,并发现:

    (假设每个人都在 wifi 上)如果A 连接到 B并且A 连接到 C,那么B 将连接到 C并能够向C发送消息。

    Multipeer Framework 是一个 P2P 框架,可以自动将所有人连接在一起

    即使(如在我当前的项目中)您将其设置为服务器 - 客户端模型,所有对等点仍将连接,并且您可以在 B 和 C 之间发送消息而无需通过 A。这取决于您对应用程序所做的事情。

  3. 跟着克里斯的回答走

  4. 在 #2 中解决

我建议查看 Apple Docs 中的示例项目,并仔细观察连接时调试区域中发生的情况。

另外,作为旁注:

Scenario:(A is only on wifi),(B is on wifi and bluetooth),(C is on bluetooth only)

如果A通过 wifi连接到B , B通过蓝牙连接到C , A仍将连接到C,但是您将无法从A直接向C发送消息,因为它们位于不同的网络上。

于 2014-04-02T20:52:51.533 回答
0

@查尔斯沃森爵士:

(假设每个人都在 wifi 上)如果A 连接到 B并且A 连接到 C,那么B 将连接到 C并能够向 C 发送消息。

Multipeer Framework 是一个 P2P 框架,可以自动将所有人连接在一起

我的问题是:当B 自动连接到 C时,B & C 会收到现有会话的状态更改通知吗?

  • A:会话:对等:B didChangeState(MCSessionStateConnected
  • B:会话:对等:A didChangeState(MCSessionStateConnected
于 2015-07-16T10:32:13.263 回答