gpt4 book ai didi

javascript - socket.io流错误: stream has already been sent

转载 作者:行者123 更新时间:2023-12-03 05:32:38 25 4
gpt4 key购买 nike

我正在尝试通过带有 socket.io-stream 的 Node.js 服务器将二进制数据从一个客户端的 256x256 Canvas 传输到另一个客户端上的 Canvas 。

在我的服务器中:

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() 没有帮助。
  • 发送 Canvas ImageData 是目标,而不是绘图应用程序 - 该应用程序只是概念证明。
  • MacOS/Chrome。

最佳答案

每次写入流时,您都会重新发出并重新传送流,而您不需要这样做!

socket.io-stream 示例假设您每次都上传新文件(因此也有新流),每个文件都需要一个新的 emit() 才能到达服务器,并且一个新的 pipe() 可以到达其他地方。

但就您而言,您可以简单地一遍又一遍地重新写入同一流,这意味着您只需要从源客户端 emit() 一次,并且 pipe( ) 一旦到达服务器。

服务器:

var outgoingstream = ss.createStream();
ss(remote).emit('blatout', outgoingstream);
ss(socket).on('blatin', function(stream, data) {
stream.pipe(outgoingstream);
});

来源客户端:

var socket = io();
var stream = ss.createStream();
ss(socket).emit('blatin', stream);

var imageBuffer = new ss.Buffer(256*256*4);
function sendBlat() {
imageBuffer.set(ctx.getImageData(0,0,canvas.width,canvas.height).data);
stream.write(imageBuffer);
return false;
}

关于javascript - socket.io流错误: stream has already been sent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40877535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com