从 MCSession 断开单个对等点?
Posted
技术标签:
【中文标题】从 MCSession 断开单个对等点?【英文标题】:Disconnect individual peers from MCSession? 【发布时间】:2014-05-02 19:41:16 【问题描述】:如果我有一组已连接的对等点,假设为 3 (a->b, a->c, a->d) 我只想断开对等“c”的连接,我该怎么办?
我看到一个对类似问题状态的回复,即您只能断开“您自己”与会话的连接:这意味着在上述情况下,如果我这样做:
[mySession disconnect];
我都在同时断开“a”与“b”、“c”和“d”的连接。 所以建议是向您要断开连接的对等方(“c”)发送通知,并告诉它从会话中断开连接。
但是,我也看到了这个,想知道它是否符合我的要求 - 仅删除特定的对等点:
[mySession.connectedPeers[0] disconnect];
编辑:我刚刚意识到这是一个只读属性,所以忽略这部分。
或者还有另一种可能更好的方法来删除特定对等点?
【问题讨论】:
【参考方案1】:每个点对点连接都由一个 MCSession 实例表示。 因此,在您的示例中,您将拥有 3 个指向 MCSession 对象的 UNIQUE 指针:
MCSession *p1 = a->b
MCSession *p2 = a->c
MCSession *p3 = a->d
所以要断开对等体 c 的连接,您将:
[p2 disconnect]; // release the session
p2 = nil; // release the resource
当然,您可以将会话存储在可变数组中,然后执行相同的逻辑,但使用数组中的指针
p2 = (MCSession *)[array objectAtIndex:1];
[p2 disconnect];
[array removeObjectAtIndex:1];
【讨论】:
那时我一定很困惑——我的印象是一个“会话”实例可以连接多个对等点,正如我在问题中所展示的那样。你是说每个会话只能有一个对等点,并且必须保留一组会话,每个会话只有一个对等点? 一点也不。在您的问题中,您刚刚说您有一系列连接的对等点 - 而不是您如何连接它们。您可以在单个会话中拥有多个对等点(最多 8 个),或者在我的情况下,由于框架当前不稳定状态的解决方法,我将每个会话保持对等点之间的 1:1 关系。 AFAIK 当您“断开连接”时,您是在告诉 MPC 您在该会话中连接到的所有对等方都需要断开连接。如果您想要更好的粒度,请采用 1:1 方法 似乎是合理的,特别是因为当多个在单个会话上时似乎没有办法断开特定对等点。谢谢。既然我已经接受了你的回答,让我们看看是否有人不同意......以上是关于从 MCSession 断开单个对等点?的主要内容,如果未能解决你的问题,请参考以下文章