我已经查看了Apple的文档,但仍然没有清理过一件事,即会话。
当 - (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/中,教程动态创建了一个新会话并使用它来接受邀请,一旦函数结束就不会丢失会话;从而丢失了连接对等的信息?
假设B,C和D都被A邀请,现在B想要向C发送内容。是否需要B先将信息发送给A或者B可以直接将信息发送给C 1
根据Apple的文档,单个会话只能容纳不超过8个对等方。是否可以创建一系列会话,以便您可以邀请超过8人加入您的设备?如果是这种情况,客户端是否还需要使用数组进行响应,以便它可以在其列表中携带超过8个对等体?
假设A和B现已连接,A现在邀请C加入。 B如何知道C现在在会话中?
感谢您阅读这么长的帖子。
答案 0 :(得分:1)
关于Multipeer Connectivity的文档并不多,所以这些答案都是基于我自己的实验:
在这一个问题中有很多问题,但简而言之,A的会话管理A已发送或接受的邀请。因此,如果B邀请并且A接受,则A在接受时传递的会话将在MCSessionDelegate
session: peer: didChangeState:
回调中用于说明连接是否发生。此时,A会话的connectedPeers
属性将包含B(如果连接成功)。 B用于发送邀请的会话也会在A接受后获得相同的回调,并且将在connectedPeers
中包含A. A和B都没有任何关于管理它们之间连接的会话的信息。是的,如果要将任何数据发送到新连接的对等体,则需要保留对处理连接的会话的引用。我还没有看到为每个邀请创建新会话的任何真正优势。
基于以上所述,B没有关于谁连接到A的信息。因此,如果A连接到B,C和D,则唯一的对等端B知道它所连接的对等端 - A.这里的多路复用连接提供的是B能够通过A发现C或D.所以如果AB通过WiFi进行连接,通过蓝牙进行交流,但B没有启用蓝牙,而C在不同的WiFi网络上,B,B和C仍然可以通过A发现对方。邀请和接受的过程仍在进行中到B和C来处理。
我在这里回答了一个关于会话管理的问题,可能会有帮助Best option for streaming data between iPhones
B对A连接到C没有任何了解。所有B可以做的就是自己发现C并将C添加到它自己的会话中。
答案 1 :(得分:1)
从快速查看克里斯的回答看,我在工作中的工作似乎很准确。
我目前正在使用多种连接进行游戏,并发现:
(假设每个人都在wifi上)如果 A连接到B 而 A连接到C ,那么 B将连接到C 并且能够发送消息到 C 。
Multipeer Framework是一个P2P框架,自动将所有人连接在一起。
即使(在我当前的项目中)将其设置为服务器 - 客户端模型,所有对等体仍将连接,您可以在B和C之间发送消息而无需通过A.取决于您正在做什么你的应用。
转到Chris的回答
在#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 , 仍然会与 C 相关联,但您无法直接从 A 向 C 发送消息因为他们在不同的网络上。
答案 2 :(得分:0)
@SirCharlesWatson:
(假设每个人都在wifi上)如果 A连接到B 而 A连接到C ,那么 B将连接到C 并且能够向C发送消息。
Multipeer Framework是一个P2P框架,自动将所有人连接在一起。
我的问题是:当 B自动连接到C 时,B& C会在现有会话中收到状态更改通知吗?