背景:
我正在使用https://github.com/elastic/beats/issues/8104库,需要一次(尽可能)一次快速连接到多个设备并开始通信。我在iOS上使用了RxAndroidBle,并开始在Pixel 2上使用RxAndroidBle。这按预期工作,可以在几百毫秒内根据需要建立与6-8个设备的连接。但是,将我的测试范围扩大到三星S8和Nexus 6P等手机上,似乎建立一个连接现在可能需要5-6秒而不是50-60毫秒的时间。目前,我将假定这种差异在特定于供应商的BT实现中。最终,这意味着连接到5个设备现在需要30秒,而不是<1秒。
问题:
根据文档和其他问题,我了解到,RxAndroidBle将所有扫描,连接和通信请求排队,并根据Android生态系统中的各种蓝牙实现,顺序执行它们以确保安全并保持稳定性。但是,当前是否有一种方法可以并行执行请求(即连接)以接受这种风险,并有可能减少我建立多个连接的总时间,直到连接时间最长的设备?
还有一个问题:是否有任何想法来诊断与设备建立连接可能需要5秒钟?还是我们只是需要接受某些电话在某些情况下会花费那么长时间的事情?
答案 0 :(得分:0)
但是,当前是否有一种方法可以并行执行请求(即连接)以接受这种风险,并有可能减少我建立多个连接的总时间,直到连接时间最长的设备?
是的。您可以尝试使用autoConnect=true
建立连接,这样可以防止将队列锁定超过几毫秒。最后的连接应以autoConnect=false
开始,以开始扫描。一些堆栈实现可以很好地解决此问题,但是您的工作量可能会有所不同。
还有一个问题:是否有任何想法可以诊断5秒钟才能建立与设备的连接?
您可以检查Bluetooth HCI snoop log。另外,您也可以尝试使用BLE嗅探器检查“播送”中实际发生的情况(例如nRF51开发套件)。
还是我们只是需要接受某些电话在某些情况下会花费那么长时间的事情?
这也是一种选择,因为通常很少有时间可以连接时间。根据我的经验,BLE堆栈/固件实现彼此之间有很大的不同。