Socket.io began to support binary stream from 1.0, is there a complete example especially for image

后端 未结 3 793
伪装坚强ぢ
伪装坚强ぢ 2020-12-13 05:03

I\'m a beginner on node.js and socket.io. Socket.io began to support binary stream from 1.0, is there a complete example especially for image push to client and show in canv

相关标签:
3条回答
  • 2020-12-13 05:50

    The solution is a bit complicated but should work in Chrome, Firefox, and IE10+ (not sure about Opera and Safari):

    Somewhere on the server-side:

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

    And here is how you handle it on a client:

    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;
    });
    

    Just replace yourCanvasId with your canvas id :)

    0 讨论(0)
  • 2020-12-13 05:52

    thanks, @sovente, in this 1.0 introduction http://socket.io/blog/introducing-socket-io-1-0/ , this is code snippet on binary support.

    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 want to know how to handle the buffer on client side, codes are like:

     socket.on("image", function(image, buffer) {
         if(image)
         {
             console.log(" image: ");
             **// code to handle buffer like drawing with canvas**
         }
    
     });
    
    0 讨论(0)
  • 2020-12-13 06:01

    Starting from socket.io 1.0 it is possible to send binary data. http://socket.io/blog/introducing-socket-io-1-0/

    How ever the way of sending and receiving binary data is not clear in the official documentation. The only documentation is:

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

    I suggest you to take a look at this answer, where you can find code implementation for server and client (javascript, java):

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

    The good part is that it also works on Android!

    Cheers

    0 讨论(0)
提交回复
热议问题