【发布时间】:2016-11-29 23:15:43
【问题描述】:
我正在尝试通过带有 socket.io-stream 的 node.js 服务器将二进制数据从一个客户端的 256x256 画布传输到另一个客户端上的画布。
在我的服务器中:
ss(socket).on('blatin', function(stream, data) {
var outgoingstream = ss.createStream();
ss(remote).emit('blatout', outgoingstream);
stream.pipe(outgoingstream);
});
在源客户端中:
canvas.addEventListener("mousemove", function(e){
sendBlat();
});
var socket = io();
var stream = ss.createStream();
var imageBuffer = new ss.Buffer(256*256*4);
function sendBlat() {
console.log('blatting');
// send buffer to the server
imageBuffer.set(ctx.getImageData(0,0,canvas.width,canvas.height).data);
stream.write(imageBuffer);
ss(socket).emit('blatin', stream);
return false;
}
在目标客户端中:
ss(socket).on('blatout', function(stream, data)
stream.on('data', function(chunk) {
imageData.data.set(new Uint8ClampedArray(chunk));
ctx.putImageData(imageData,0,0);
});
});
...这可行,但速度很慢,在我的源客户端控制台中,我看到这个错误一遍又一遍地重复:
socket.io-stream.js:794 Uncaught Error: stream has already been sent.
所以我显然没有正确处理流。我错过了哪些步骤?
注意事项:
- 很容易填充缓冲区并观察它慢慢清空到目标客户端。 – 也很容易使服务器过载,直到它停止响应。
- 限制
sendBlat()没有帮助。 - 发送画布 ImageData 是目标,而不是绘图应用程序 - 该应用程序只是概念验证。
- MacOS/Chrome。
【问题讨论】:
标签: javascript node.js socket.io stream