簡體   English   中英

socket.io-stream錯誤:流已發送

[英]socket.io-stream error: stream has already been sent

我試圖通過具有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。

每次寫入流時,您都將重新發送和重新傳輸流,而無需這樣做!

socket.io-stream示例假定您每次都上載新文件(因此也上載了新的流),每個文件都需要一個新的emit()到達服務器,以及一個新的pipe()到其他任何地方。

但是在您的情況下,您可以簡單地一遍又一遍地重寫相同的流,這意味着您只需要從源客戶端emit()一次pipe()一次在服務器上發送pipe()一次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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM