iOS7中的多重连接会话

时间:2014-03-31 02:25:43

标签: session ios7 multipeer-connectivity

我已经查看了Apple的文档,但仍然没有清理过一件事,即会话。

  1. 当 - (void)广告商:(MCNearbyServiceAdvertiser *)广告商didReceiveInvitationFromPeer:(MCPeerID *)peerID withContext:(NSData *)context invHandler:(void(^)(BOOL,MCSession *))调用invitationHandler,我们需要将会话传递给invitationHandler。本次会议会发生什么? 当A邀请B加入A创建的会话时,B是否也向A提供新会话?什么是B&C会议内部?它只是A单独还是包括目前正在进行A会话的所有同伴? B应该跟踪用于接受A邀请的会话吗? 在本文http://nshipster.com/multipeer-connectivity/中,教程动态创建了一个新会话并使用它来接受邀请,一旦函数结束就不会丢失会话;从而丢失了连接对等的信息?

  2. 假设B,C和D都被A邀请,现在B想要向C发送内容。是否需要B先将信息发送给A或者B可以直接将信息发送给C 1

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

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

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

3 个答案:

答案 0 :(得分:1)

关于Multipeer Connectivity的文档并不多,所以这些答案都是基于我自己的实验:

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

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

  3. 我在这里回答了一个关于会话管理的问题,可能会有帮助Best option for streaming data between iPhones

  4. B对A连接到C没有任何了解。所有B可以做的就是自己发现C并将C添加到它自己的会话中。

答案 1 :(得分:1)

  1. 从快速查看克里斯的回答看,我在工作中的工作似乎很准确。

  2. 我目前正在使用多种连接进行游戏,并发现:

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

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

    即使(在我当前的项目中)将其设置为服务器 - 客户端模型,所有对等体仍将连接,您可以在B和C之间发送消息而无需通过A.取决于您正在做什么你的应用。

  3. 转到Chris的回答

  4. 在#2

  5. 中解决

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

    另外,作为旁注:

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

    如果 A 通过wifi连接到 B B 通过蓝牙连接到 C 仍然会与 C 相关联,但您无法直接从 A C 发送消息因为他们在不同的网络上。

答案 2 :(得分:0)

@SirCharlesWatson:

  

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

     

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

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

  • A:session:peer:B didChangeState( MCSessionStateConnected
  • B:session:peer:a didChangeState( MCSessionStateConnected