Google 附近连接 2.0 功能

Google Nearby Connections 2.0 capabilities

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

场景

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

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

我关注issues/questions

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

Q2: 我无法像这样用 Wifi 那样连续发送 message/file 30 秒

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

因为如果我尝试这样做然后我得到了太多的异常 work.I 必须等待 onTransferPayLoadUpdate()

中的回调

Q3: 如果我尝试向其他节点发送1MB或更大的文件,节点在onPayloadReceived回调中成功接收到文件,但server/sender延迟太多后收到成功状态。在我的例子中,它在客户端回调后 1 分钟到 5 分钟之间。在服务器上收到成功回调之前,我无法发送新文件。如果我尝试在收到回调之前发送它,则什么也不会发生。完全没有。所以本质上我只能发送一次 1MB 的文件,然后我必须重新发送这两个设备才能发送另一个文件。

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

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

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

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

如果您想超越这个范围,进入 10s 和 100s,并且没有可用的路由器,则必须构建网状网络。如果您有兴趣,我可以 link 您举例说明如何做到这一点。我们不在 Connections 中提供对此的支持,但其他人已经在我们之上构建了网格,因此我们可以为您指明正确的方向。

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

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