来自中央的数据每 10 秒接收一次,为什么?

Data from central is received only every 10 seconds, why?

外围设备设置为使用一项服务进行广告,并添加了两个特征。一个特点是 属性 通知和可读权限。另一个特征是属性 可写和可写权限。提到的第二个特征用于从中央到外围设备的通信,这就是问题所在。

好像有10秒的循环。在 10 秒的时间跨度内,最多只能收到一个预期的包裹。此外,如果中央在发送数据后 10 秒发送数据,然后外围设备立即收到预期的包,则不到一秒。

你可以从调试器的输出中明白我的意思。

2017 年 2 月 15 日编辑 * 为了更好地阐明这个问题,我将提供有关调试器输出的更多信息。你在这里看到的是正在调试的中央。 "writeValue"表示数据已发送,"didWriteValueFor"表示确认数据已成功到达外设。在委托方法中调用此确认:

func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) 

*

好像描述方向的通信在上次接收数据后被阻塞了10秒,然后又打开了。是否可以防止这种阻塞?需要立即通知外围设备,而不是每 10 秒通知一次。我确信我配置错误或者我忘记了一些重要的东西。

非常感谢您的帮助。

最后,从 iOS 中央到 iOS 外围设备的数据传输达到了不错的速度。为此,我必须进行两项更改,它们直接相互关联。 iOS 外围侧和 iOS 中央侧一样进行了更改。 部分解决方案是在 iOS 外设端配置 CBMutableCharacteristic 对象。我已经将它的属性设置为 Writable With Response,尽管为了尽可能快地进行通信,我现在将它设置为 Writable Without Response。 所以 CBMutableCharacteristic 对象的实例化看起来像这样:

let characteristicWritableWithoutResponseCBMutableCharacteristic.init(type: CBUUID.init(string: TRANSFER_CHARACTERISTIC_UUID), properties: CBCharacteristicProperties.writeWithoutResponse, value: nil, permissions: CBAttributePermissions.writeable)

解决方案的另一部分在中央方面。由于 CBMutableCharacteristic 对象是使用“writeWithoutResponse”实例化的,因此我不得不将方法 writeValue 的参数类型从 CBCharacteristicWriteType.withResponse 更改为 CBCharacteristicWriteType.withoutResponse。现在看起来像这样:

currentPeripheral.writeValue(newPayload, for: writableCharacteristic, type: CBCharacteristicWriteType.withoutResponse)

从中央到外围设备的数据传输时间现在远低于一秒。尽管我必须提到中央发送的数据非常少(最初是双数据类型的值)。 我希望这也会对其他人有所帮助。