通过Socket.IO发送缓冲区问题

我试图通过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似乎没有包含任何东西)之外,在客户端一切看起来都不错。

我是否错过了一些明显的东西,或者这不是它应该如何工作? 非常感谢!

原来这工作正常。 由于某些原因,Buffer不允许我直接访问它,而且长度没有定义。 转换成Uint8Array虽然完美。 我猜这是因为即使socket.io现在将发送缓冲区对象不保证您的客户端JavaScript将知道如何处理它们。

这工作:

 socket.on('updateImg', function(data) { var imgArray = new Uint8Array(data.buffer); console.log("update img: " + data.buffer + ", " + data.buffer.length); }); 

Buffer是浏览器没有本地支持的节点,但是它们支持Typed Arrays(比Buffer Shim更好)。 所以在浏览器端使用更好的容器是有意义的。