gpt4 book ai didi

ios - 为什么 Multipeer Connectivity Framework 发现自己既是外国同行又是不存在的外国同行?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:41:12 27 4
gpt4 key购买 nike

我一直在开发实现多点连接 (MC) 框架的应用程序。当第一次通过 Xcode 在两个不同的手机上运行应用程序时,phoneBob 和 phoneJack,我在 displayName 'BobA' 和 下为 phoneBob 初始化了一个 MCSession MCSession 用于 displayName 'JackA' 下的 phoneJack。 phoneBob 的 MC 发现“JackA”很好,反之亦然,两者可以毫无问题地连接。

但是,删除应用程序并通过 Xcode 重新运行后,我为 displayName 'BobB' 下的 phoneBob 初始化了一个 MCSession 和一个 MCSession对于 displayName 'JackB' 下的 phoneJack。除了 phoneBob 找到可以成功连接的外部对等点“JackB”之外,它还在日志中找到外部对等点“JackA”,即使“JackA”无法连接到并且与应用程序的先前版本相关联.反之亦然,phoneJack 不仅找到了外部对等点“BobB”,还找到了外部对等点“BobA”。不仅如此,phoneBob 实际上会为应用程序的两个安装找到 ITSELF,“BobA”和“BobB”作为外国同行,而 phoneJack 会发现自己,“JackA”和“JackB”作为外国同行。

我将这些以前安装的应用程序无法连接到“幽灵对等点”的外国对等点称为“幽灵对等点”。我通过 Xcode 卸载并重新运行该应用程序的次数越多,MC 发现的这些 ghost peers 的数量就越大。请注意,这些 ghost peer 仅在应用程序删除后第二次和后续运行时出现。重新启动手机并运行应用程序可以摆脱这些幽灵同行,但我完全不明白为什么 MC 会发现 ITSELF 是外国同行以及实际上并不存在的同行。是否有可能在第二次安装该应用程序时,MC 正在从第一次安装该应用程序时开始一个 ghost session ,该 session 由于某种原因从未终止?我们在第一次安装时初始化的 session 是否有可能在应用程序被删除后仍然存在?

最佳答案

我相信这些幽灵对等点的原因一般是因为 multipeer 是建立在 Bonjour 协议(protocol)之上的,该协议(protocol)通过让客户端向路由器注册自己来工作。当您强行关闭时,没有机会取消注册,这些客户端会一直等待直到超时。

解决这个问题的方法是,第一次创建 MCPeerID 时,您应该序列化并保存它。然后在后续运行中加载并重用同一个对等点,这将防止您将自己视为幽灵,因为当您注册自己时,您现在将替换旧的幽灵版本。

旧的 Apple 开发论坛上有一个线程,其中包含示例代码和 Apple 工程师的回复,确认这是推荐的方法:https://devforums.apple.com/message/1002886#1002886

关于ios - 为什么 Multipeer Connectivity Framework 发现自己既是外国同行又是不存在的外国同行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29220497/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com