附近连接2.0:混合不同的策略



我一直在尝试附近的新Android v2.0 API,并且对广告和发现的连接策略有一些疑问。这些问题涉及奇怪的边缘案例,可能不容易回答。但是,当我在另一个帖子的评论中提到这些潜在问题时,附近的Connections Developer要求我对这些问题创建一个单独的问题。这个问题涉及我想到的一些奇怪的(但有些不自然的)边缘案例(但是,哪种普通的开发人员不太可能遇到)。

文档包含以下略有模棱两可的陈述:"附近的连接支持广告和发现的不同策略。"最初,我将其解释为意味着我们可以选择两种可用的连接策略之一,并将其用于广告和发现。由于连接策略在特定节点上定义了(本地)连接拓扑,因此我们需要使用相同的连接策略进行广告和发现是有道理的。

但是,人们还可以将模棱两可的陈述解释为意味着人们可以(从字面上)使用不同的策略进行广告和发现。这似乎是荒谬的,但是似乎没有任何机制来实际迫使策略是相同的。由于strotadvertising()和startDiscovery()都采用"策略"参数,因此很有可能将其他策略通过每个策略。

注意:我已经通过实验发现了上述问题的答案。如果广告商和发现者正在使用不匹配的策略,则从未达到发现者的onEndpointFound回调(因此,我猜想低级代码必须意识到存在不匹配并且永远不会发送它)。

另一个问题:是否可能存在异质网络(具有多种策略)?由于连接策略会影响两个连接节点之间使用的通信手段(P2P_CLUSTER使用低带宽用于小型数据传输,而使用蓝牙和WiFi热点的P2P_STAR用于更高的带宽),因此,为了使两个节点连接,这似乎都将是需要使用相同的策略。

如前所述,实验表明,两个节点确实需要使用相同的策略来连接。但是,我可以想象另一个边缘情况,在使用"群集"策略中,设备A连接到设备B,切换策略(在保持连接打开的同时),然后使用" Star"策略连接到设备C。这可以工作吗?我不知道。由于我当前的测试程序在更改配置后重新启动,因此我需要编写新的代码才能测试此边缘情况(而且我还有很多其他我宁愿写的代码)。但是附近的连接开发人员有兴趣听到有关潜在边缘案例的了解,所以我在这里提到这一点。

当我试图调试其他连接问题时,这些问题出现了。为了使我的实验程序更具通用性,我为连接策略添加了一个设置选项,以及控制程序是否应该只是广告还是发现或两者兼而有之的其他设置选项。然后我必须决定这些设置更改时应该发生什么。

仅停止广告/发现,然后使用请求的策略重新启动指定的内容是否足够?但是,从以前的策略中剩下的任何现有连接会发生什么呢?这个答案似乎并不明显。

也许这些问题只会像我的测试程序一样在人工场景中出现(我只是写了这一点,因为我试图理解其他连接问题)。在最终产品中,我可能只选择一种策略并始终如一地使用它。而且,如果附近的连接是开源的,我只会查看该代码,以了解这些奇怪的边缘情况下可能发生的情况。但是,由于我看不到来源,很高兴看到有关预期行为的更多文档

是的,您回答了自己的问题。您必须匹配广告商和发现者方面的策略。否则,您将永远不会发现广告设备。

至于流动中间的切换策略,明确禁止了它。当您开始广告/启动发现时,您将在先前的策略上有连接时会遇到错误。

最新更新