Stream 通过BLE进行双向数据流传输的最有效方法是什么?

Stream 通过BLE进行双向数据流传输的最有效方法是什么?,stream,bluetooth-lowenergy,core-bluetooth,Stream,Bluetooth Lowenergy,Core Bluetooth,我有一个应用程序,它将作为一个BLE中心(扫描外设),运行在iOS 8和更高版本上。此外,我还有一个作为外设的定制配件(宣传具有定制特征的定制服务) 我打算以突发方式发送大约20KB的数据,大约每小时在中央和外围之间来回发送10次 天真的方法在外围设备上似乎有两个特点: 阅读并通知 写 当外围设备想要向中央设备发送数据时,它将发送第一个特征的通知,然后中央设备将请求第一个特征的值 当中央处理器想要向外围设备发送数据时,它只会写入第二个特征 看来,特征指示是没有用的,而且我可以在不等待响应的情

我有一个应用程序,它将作为一个BLE中心(扫描外设),运行在iOS 8和更高版本上。此外,我还有一个作为外设的定制配件(宣传具有定制特征的定制服务)

我打算以突发方式发送大约20KB的数据,大约每小时在中央和外围之间来回发送10次

天真的方法在外围设备上似乎有两个特点:

  • 阅读并通知

当外围设备想要向中央设备发送数据时,它将发送第一个特征的通知,然后中央设备将请求第一个特征的值

当中央处理器想要向外围设备发送数据时,它只会写入第二个特征

看来,特征指示是没有用的,而且我可以在不等待响应的情况下写入(外围设备会让我知道错误并要求重新发送数据)

但我不确定我是否错过了什么

有没有更好的方法通过BLE以尽可能快的速度传输~20KB的数据?

是否存在任何阻碍这种方法在作为中心的核心蓝牙中根本不起作用的原因?


不涉及MTU和特征尺寸-我为这些问题创建了另一个SO问题;对于这个问题,假设它们尽可能大。

“当外围设备想要向中央发送数据时,它会发送第一个特征的通知,然后中央会请求第一个特征的值。”为什么不简单地发送大量通知,每个数据块一个?我想我还不知道BLE spec是否足够好-我认为通过通知发送大量数据不是好的做法,最好使用长(又称blob)读取。但是,如果通过通知发送块比notify+blob读取更有效,那么我会试试。notify+multiple read blob请求效率非常低。读blob请求基本上每MTU-1字节数使用两次往返,因为一次可能只有一个未完成的请求,并且外围设备通常没有足够的时间在同一连接事件中响应。对于通知,链接层将在同一连接事件中发送多个通知。但是请注意,如果通知的缓冲区空间不足等,则允许实现删除通知。对于写入而不响应也是如此。安卓没有放弃任何东西,但我不确定iOS。