我目前有我的OSX应用程序(中央)通过writeValue通过可写特性将4Kb图像发送到我的iOS应用程序(外围)。
因为图像大小超出了限制,所以我通过以下函数多次使用writeValue:
func sendData() {
while (self.sendDataIndex < self.dataToSend.length) {
var amountToSend = self.dataToSend.length - self.sendDataIndex!
if (amountToSend > NOTIFY_MTU) {
amountToSend = NOTIFY_MTU
}
// Copy out the data we want
var chunk = self.dataToSend.subdataWithRange(NSMakeRange(self.sendDataIndex!, amountToSend))
// Send it
self.discoveredPeripheral?.writeValue(chunk, forCharacteristic: self.setupCharacteristic, type: CBCharacteristicWriteType.WithoutResponse)
// It did send, so update our index
self.sendDataIndex = self.sendDataIndex!+amountToSend;
}
self.discoveredPeripheral?.writeValue("EOM".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true), forCharacteristic: self.setupCharacteristic, type: CBCharacteristicWriteType.WithResponse)
}
我的问题是,它花费的时间比我需要的要长得多,大约需要30秒。
奇怪的是,即使我在发送图像时使用CBCharacteristicWriteType.WithoutResponse,却得到了它们的响应,我想知道这是否会使它变慢。
这就是我在外围设备上进行特征设置的方式:
var cbProperties = CBCharacteristicProperties.Read|CBCharacteristicProperties.Write|CBCharacteristicProperties.Notify
var cbPermissions = CBAttributePermissions.Readable|CBAttributePermissions.Writeable
var transferCharacteristic = CBMutableCharacteristic(type: CBUUID.UUIDWithString(SETUP_CHARACTERISTIC_UUID), properties: cbProperties, value: nil, permissions: cbPermissions)
我已经为NOTIFY_MTU尝试了不同的值,范围从20到900,但是它越高,执行writeValue的次数就越少,但是每个包到达所花费的时间就越长。
我已经看到转帐的执行速度更快,关于如何改善转帐的任何建议?
谢谢
通过将CBCharacteristicProperties更改为WriteWithoutResponse,我可以将其降低到3秒。
程序包的传输速度非常快,但是我不知道何时交付了响应,所以我不得不执行自己的响应才能知道传输何时完成。
除此之外,它的运行非常棒!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句