微信小程序与蓝牙分包发送数据

1,131 阅读1分钟

分包原因

微信图片_20211029103103.png

项目中为了兼容大部分手机,实现分包发送,每次只能20byte,这个传输速度实在有点慢, 对传输速度要求比较高的, 去设置 MTU 吧(安卓手机), 苹果手机经过几种机型的测试(iphone6s - iPhoneX),不用设置 MTU(而且设置也会失败,看官方文档), 每次传248byte都没问题, 但有一点是,小程序的传输速度(例如 50ms/包)远大于蓝牙接收速度(可能是 100ms/包), 蓝牙那边接收速度很慢, 延迟很高. 建议传低字节的.有小伙伴解决了这个问题,请指教.

/**
 * 分包发送
 * @param {Object} ArrayBuffer
 */
function createChunks(buffer) {
    const offset = 20; // 偏移量
    let pos = 0; // 位置
    let bytes = buffer.byteLength; // 总字节

    while (bytes > 0) {
        let endPos = bytes > offset ? (pos + offset) : (pos + bytes);
        const tempBuffer = buffer.slice(pos, endPos);

        pos += offset;
        bytes -= offset;

        // 延迟发送
        sendDelay(150, tempBuffer).then(buffer => {
            JRBLE && JRBLE.writeBLECharacteristicValue(buffer).then(res=>{
                 // console.log(res)
            })
        })
    }
}
/**
 * 数据分包延迟执行函数
 * @param {Number} delay 毫秒数
 * @param {ArrayBuffer} buffer 数据
 * @return {Promise}
 */
function sendDelay(delay, buffer) {
    return new Promise((resolve, reject) => {
         setTimeout(() => resolve(buffer), delay);
    })
}