我目前正在从事一个毕业项目,我想使用BLE传输会话令牌。在服务器端,我正在使用Node.js和Bleno创建连接。客户端订阅该通知后,服务器将推送令牌。 该代码的一小部分是:
const buf1 = Buffer.from(info, 'utf8');
updateValueCallback(buf1);
在此步骤中,我正在使用nRF Connect检查是否一切正常。我的意图有效,但我只看到前20个字符被转移。 (与数据包大小一样)
我的问题与缓冲区大小有关。当我最终连接到Android应用程序时,将传输整个字符串吗?在这种情况下,基础协议将剪切字符串并在另一侧重新组装。在这种情况下,缓冲区大小无关紧要。还是我必须将MTU协商为字符串的大小。换句话说,buffersize是否必须是传输包的大小?
在缓冲区小于整个字符串的情况下,整个字符串是否仍可以与之一起传输?
答案 0 :(得分:1)
GATT要求通知的最大MTU为3个字节长。默认的MTU为23,因此默认情况下最大修改值长度为20个字节。通过协商更大的MTU,您可以发送更长的通知(如果您的BLE堆栈支持的话)。
答案 1 :(得分:0)
我还没有使用Bleno,但是我曾经使用过的所有堆栈都需要自己将数据切片20个字节。然后在接收方收集它们,然后将它们重新放在一起。
堆栈可以很好地缓冲数据并一次传输一整块数据。因此,我循环了该函数(作为您的updateValueCallback()),直到完成所有数据切片为止。
希望它对您有用。