2014-06-08 16 views
7

görüntü için tam bir örnek var node.js ve socket.io'da yeni bir başlangıç ​​yapıyorum. Socket.io, 1.0'dan gelen ikili akışı desteklemeye başladı, özellikle istemciye resim bastırma ve tuvalde gösterme için tam bir örnek var mı? TeşekkürlerSocket.io 1.0'dan ikili akışı desteklemeye başladı, özellikle

+0

Ben sadece düğüm kaynağına damla okuyup sonra sokete onu yayarlar gerek, bütün dinleyiciler damla alacaktır. İstemci tarafında base64'te kodlamanızı öneririm (veya cpu sorunlarınız olmayacağından eminseniz sunucu tarafını kodlayın) ve sonra şu yönergeleri izleyin: http://stackoverflow.com/questions/16449445/how- can-i-set-image-source-with-base64 – matteospampani

cevap

16

çözüm biraz karmaşık ama Chrome, Firefox ve IE10 + (emin değilim içinde çalışması gerekir

io.on('connection', function(socket){ 
    fs.readFile('/path/to/image.png', function(err, buffer){ 
     socket.emit('image', { buffer: buffer }); 
    }); 
}); 
: sunucu tarafında

Somewhere: Opera ve Safari) hakkında Burada

Ve eğer bir istemci üzerinde hallederim nasıl:

socket.on('image', function(data) { 
    var uint8Arr = new Uint8Array(data.buffer); 
    var binary = ''; 
    for (var i = 0; i < uint8Arr.length; i++) { 
     binary += String.fromCharCode(uint8Arr[i]); 
    } 
    var base64String = window.btoa(binary); 

    var img = new Image(); 
    img.onload = function() { 
     var canvas = document.getElementById('yourCanvasId'); 
     var ctx = canvas.getContext('2d'); 
     var x = 0, y = 0; 
     ctx.drawImage(this, x, y); 
    } 
    img.src = 'data:image/png;base64,' + base64String; 
}); 

Sadece tuval id :)

+0

Teşekkürler, @CuriousGuy, ama ben her zaman "Uncaught TypeError: undefined '' buffer 'özelliği okunamıyor ve istemci tarafında hiçbir görüntü okunamıyor. – guoleii

+0

Etkinliğinizi bu gibi sunucudan yaymıyor musunuz: 'socket.emit ('image');'? Eğer öyleyse, bunu böyle yapmaya çalışın: 'socket.emit ('image', {buffer: buf});' – Curious

+0

oh, benim hatam, teşekkürler, @CuriousGuy, işe yarıyor. – guoleii

1

teşekkürler, @ bu 1.0 tanıtımında http://socket.io/blog/introducing-socket-io-1-0/ @sovente, bu ikili destek kod snippet'i.

var fs = require('fs'); 
var io = require('socket.io')(3000); 
io.on('connection', function(socket){ 
    fs.readFile('image.png', function(err, buf){ 
    // it's possible to embed binary data 
    // within arbitrarily-complex objects 
    socket.emit('image', { image: true, buffer: buf }); 
    }); 
}); 

i istemci tarafında tampon nasıl işleneceğini bilmek istiyorum, kodlar gibidir:

socket.on("image", function(image, buffer) { 
    if(image) 
    { 
     console.log(" image: "); 
     **// code to handle buffer like drawing with canvas** 
    } 

}); 
0

o ikili veri göndermek mümkündür 1.0 socket.io başlayarak ile yourCanvasId değiştirin. http://socket.io/blog/introducing-socket-io-1-0/

Resmi belgelerde ikili veri gönderme ve alma şekli net değil. Sadece belgeler geçerli:

var socket = new WebSocket('ws://localhost'); 
socket.binaryType = 'arraybuffer'; 
socket.send(new ArrayBuffer); 

Ben size sunucu ve istemci (javascript, java) için kod uygulaması bulabilirsiniz bu cevap, bir göz atın öneririm:

https://stackoverflow.com/questions/34056705/how-to-send-binary-data-with-socket-io/

iyi bölüm de Android'de çalışır!

Alkış