如何使用 for 循环通过 BLE 发送数据
How to send Data via BLE using a for loop
我是 BLE 的新手,我正在制作一个需要 Data
对象通过 BLE 快速连续传输的应用程序。到目前为止,我已经尝试了 for
循环来根据索引更改特征。它成功地更改了第一个值的特征,但在其余值上失败了。我目前正在开发一个 POC,它的代码如下所示。
guard let characteristic = self.transferCharacteristic else { return }
for x in "Hello there" {
let data = Data("\(x)".data(using: .utf8)!)
let didSend = self.peripheralManager.updateValue(data, for: characteristic, onSubscribedCentrals: nil)
if didSend {
print("Sent: \(x)")
} else {
print("Couldn't send: \(x)")
}
}
这个的输出是,
Sent: H
Couldn't send: e
Couldn't send: l
Couldn't send: l
.
.
.
Couldn't send: e
Couldn't send: r
Couldn't send: e
我怎样才能实现我想要的?
有没有更好的方法?
我知道交易需要几毫秒,但不知道如何将特征变化与交易速度同步,如果可能的话。
提前致谢。
如果此调用收到 false,则需要存储其余数据包并等待调用 peripheralManagerIsReady(toUpdateSubscribers:)
。然后您可以对其他更改进行排队,直到 return 再次为 false。你不能在不处理背压的情况下循环执行此操作。
根据您的用例,您可能会发现在管理器准备好之前丢弃中间数据包会更好,或者您可以将它们排队,或者如果丢弃的数据太多,您可能会 return 出错,或许多其他策略。哪种背压策略有意义取决于您的问题。
请记住,您也有可能随时断开连接。 BLE 是一种可靠的传输方式,因此您永远不会收到数据包乱序、跳过或损坏的数据包,但这并不意味着数据包会被传送。
也就是说,这是发送大量数据的一种非常低效的方式。通常,您应该将数据包组合成块(最多 maximumUpdateValueLength
)并以更少的写入次数发送它们。发送数据包有很多开销。成为可靠的交通工具需要付出巨大的代价。
我是 BLE 的新手,我正在制作一个需要 Data
对象通过 BLE 快速连续传输的应用程序。到目前为止,我已经尝试了 for
循环来根据索引更改特征。它成功地更改了第一个值的特征,但在其余值上失败了。我目前正在开发一个 POC,它的代码如下所示。
guard let characteristic = self.transferCharacteristic else { return }
for x in "Hello there" {
let data = Data("\(x)".data(using: .utf8)!)
let didSend = self.peripheralManager.updateValue(data, for: characteristic, onSubscribedCentrals: nil)
if didSend {
print("Sent: \(x)")
} else {
print("Couldn't send: \(x)")
}
}
这个的输出是,
Sent: H
Couldn't send: e
Couldn't send: l
Couldn't send: l
.
.
.
Couldn't send: e
Couldn't send: r
Couldn't send: e
我怎样才能实现我想要的? 有没有更好的方法?
我知道交易需要几毫秒,但不知道如何将特征变化与交易速度同步,如果可能的话。
提前致谢。
如果此调用收到 false,则需要存储其余数据包并等待调用 peripheralManagerIsReady(toUpdateSubscribers:)
。然后您可以对其他更改进行排队,直到 return 再次为 false。你不能在不处理背压的情况下循环执行此操作。
根据您的用例,您可能会发现在管理器准备好之前丢弃中间数据包会更好,或者您可以将它们排队,或者如果丢弃的数据太多,您可能会 return 出错,或许多其他策略。哪种背压策略有意义取决于您的问题。
请记住,您也有可能随时断开连接。 BLE 是一种可靠的传输方式,因此您永远不会收到数据包乱序、跳过或损坏的数据包,但这并不意味着数据包会被传送。
也就是说,这是发送大量数据的一种非常低效的方式。通常,您应该将数据包组合成块(最多 maximumUpdateValueLength
)并以更少的写入次数发送它们。发送数据包有很多开销。成为可靠的交通工具需要付出巨大的代价。