[英]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()
無效。 每次寫入流時,您都將重新發送和重新傳輸流,而無需這樣做!
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.