android - 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 的文件,然后我必须重新发送两个设备才能发送另一个文件。
解决方案
这应该分为 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 只是一个标头,意味着有一个传入的文件或流,但尚未收到数据。对于字节有效负载,我们实际上在标头内发送完整的字节有效负载,因此这是数据立即可用的唯一时间。
推荐阅读
- machine-learning - 数据采样技术和问题
- watir - 脚本在本地传递时 Jenkins 框中的“找不到元素”异常
- c# - 当两个并发更改发生时,为什么 RowVersion 属性不会引发乐观并发异常?
- html - 如何在轮播指示器之间放置两个箭头?
- android - 在android中使用kotlin将字符串化的json转换为jsonArray
- c++ - C++ 中有多少种原始数据类型?
- html - SpringBoot项目中无法刷新html的标题
- javascript - $this 带有 .on 点击功能的 jQuery 链接不起作用
- windows - 无法更改可视代码存储库设置
- java - 为什么 Spring boot Security Basic Authentication 慢?