首页 > 解决方案 > Google Nearby Connections 2.0 功能

问题描述

我正在评估 Google Nearby connections2.0,更具体地说是评估它的协同效应。为此,我在完全离线的情况下对 Wifi、蓝牙和 BLE 进行评估,没有任何路由器。

设想

一台设备正在做广告,所有其他设备(总共 8 台设备)正在发现。成功连接后,我将 20B、200B 和 33KB 大小的简单文件在 30 秒内直接发送到每个连接的设备。

我正在使用具有 android 版本的 android Samsung S6 SM-G920F设备:6.0.1 和 playservices 版本 12.8.74

我有以下问题/问题

Q1:首先最多可以同时连接 3 到 4 个设备,这会导致其他设备断开连接。即使只连接了 3 台设备,并且我连续发送消息 30 秒,其中一台已断开连接?简而言之,不能维持与任何设备的连接超过 45 秒。通常断开连接发生在 25 - 45 秒之间

Q2:我不能像这样使用 Wifi 那样连续发送消息/文件 30 秒

While(30sec){
   bluetoothSocket.outputStream.write(bytes)
}

因为如果我尝试这样做,那么我得到了太多工作的例外。我必须等待回调onTransferPayLoadUpdate()

Q3 : 如果我尝试将 1MB 或更多的文件发送给其他对等方,对等方在onPayloadReceived回调中成功接收到文件,但服务器/发送方在延迟太多后收到成功状态。在我的情况下,它在客户端回调后 1 分钟到 5 分钟之间。在服务器上获得成功回调之前,我无法发送新文件。如果我在收到回调之前尝试发送它,则不会发生任何事情。字面上没什么。所以本质上我只能发送一次 1MB 的文件,然后我必须重新发送两个设备才能发送另一个文件。

标签: androidgoogle-nearby

解决方案


这应该分为 3 个单独的问题。它可以帮助未来的开发人员更轻松地搜索。因此,如果您有时间这样做,请告诉我,我也会分开回答。但无论如何,让我们开始吧!

A1: Nearby Connections 有 3 种不同的策略。策略越有限,我们可以使用的媒介类型就越多。因此,考虑到这一点,并且不涉及路由器,P2P_CLUSTER 将只使用蓝牙。这是最通用的策略,因此可用的媒介最少。

所有 Android 设备都使用移动蓝牙芯片,不幸的是这些芯片很弱(但体积小且对功率敏感),这导致它们理论上有 7 台设备限制,但实际有 3~4 台设备限制。更糟糕的是,这个限制也被智能手表和配对耳机吃掉了。这就是你遇到问题的原因。

P2P_STAR 和 P2P_POINT_TO_POINT 都受到更多限制,因为您无法在任何方向上连接。您需要事先选择主机是谁,并让每个人都扫描并连接到该主机。但是您可以获得 WiFi 热点的额外好处,它具有更高的带宽和更多的同时支持的设备。我已经看到 7 台设备愉快地连接到 Lollipop 设备。

如果你想超越这个范围,进入 10s 和 100s,并且没有路由器,你将不得不建立一个网状网络。如果您有兴趣,我可以将您链接到如何执行此操作的示例。我们在 Connections 中不提供对此的支持,但其他人已经在我们之上构建了网格,因此我们可以为您指明正确的方向。

A2:您能否包含您看到的错误的堆栈跟踪?Payload.Type.STREAM 是为连续发送数据而构建的。其他有效载荷类型也应该可以工作,暴露一些罕见但潜在的问题,例如字节有效载荷填满手机 RAM。

A3:两个设备都需要等待onPayloadTransferUpdate(SUCCESS)。onPayloadReceived 只是一个标头,意味着有一个传入的文件或流,但尚未收到数据。对于字节有效负载,我们实际上在标头内发送完整的字节有效负载,因此这是数据立即可用的唯一时间。


推荐阅读