我正在尝试通过socket.io将缓冲区发送到我的浏览器。据说这是1.0的支持。
服务器代码:
var tempBuffer = new Buffer(10);
for (var i=0; i<10; i++) {
tempBuffer[i] = i;
}
io.sockets.emit('updateDepth', { image: true, buffer: tempBuffer });
客户代码:
socket.on('updateDepth', function(data) {
console.log("update depth: " + data.buffer + ", " + data.buffer.length);
});
除了data.buffer是一个ArrayBuffer(不是Buffer)并且长度未定义(ArrayBuffer似乎不包含任何东西)之外,客户端上的一切看起来都不错。
我错过了一些明显的东西,或者这不是它应该如何工作的?非常感谢!
答案 0 :(得分:3)
事实证明这很好。由于某种原因,缓冲区不允许我直接访问它,它的长度是未定义的。将它转换为Uint8Array虽然工作得很好。我猜这是因为即使socket.io现在发送Buffer对象,也不能保证你的客户端javascript知道如何处理它们。
这确实有效:
socket.on('updateImg', function(data) {
var imgArray = new Uint8Array(data.buffer);
console.log("update img: " + data.buffer + ", " + data.buffer.length);
});
答案 1 :(得分:1)
Buffer
是浏览器没有本机支持的节点,但它们支持Typed Arrays(优于Buffer shim)。因此,在浏览器端使用更好的容器是有意义的。