tutorial socket rooms node libreria example español descargar con javascript node.js sockets socket.io socket.io-1.0

javascript - rooms - socket io, node js, ejemplo simple para enviar imágenes/archivos del servidor al cliente



socket.io chat rooms example (1)

¿Hay algún ejemplo sencillo y directo sobre cómo servir una imagen? de servidor a cliente? a través del almacenamiento en búfer o simplemente una llamada directa para descargar? (el objetivo es obtener archivos de imagen casi en tiempo real de manera eficiente para presentar una transmisión de imágenes casi en vivo) y anexar a una etiqueta de imagen html o simplemente en el cuerpo de la página html.

código de muestra incompleto: (principalmente adquirido a partir de muestra oficial o solo códigos de stackoverflow)

index.js

// basic variables var app = require(''express'')(); var http = require(''http'').Server(app); var io = require(''socket.io'')(http); var fs = require(''fs''); // required for file serving http.listen(3000, function(){ console.log(''listening on *:3000''); }); // location to index.html app.get(''/'', function(req, res){ res.sendFile(__dirname + ''/index.html''); }); // only to test chat sample code from sample io.on(''connection'', function(socket){ console.log(''a user connected''); // broadcast a message socket.broadcast.emit(''chat message'', ''System Broadcast Message: a user has been connected''); socket.on(''chat message'', function(msg){ io.emit(''chat message'', msg); }); // trying to serve the image file from the server io.on(''connection'', function(socket){ fs.readFile(__dirname + ''/images/image.jpg'', function(err, buf){ // it''s possible to embed binary data // within arbitrarily-complex objects socket.emit(''image'', { image: true, buffer: buf }); console.log(''image file is initialized''); }); });

(página html del lado del cliente) index.html (vamos a ir al grano solo con la porción que sirve la imagen) ¿Qué podemos hacer en el lado del cliente para obtener el archivo y servir la imagen en la página html?

socket.on("image", function(image, buffer) { if(image) { console.log(" image: from client side"); // code to handle buffer like drawing with canvas** <--- is canvas drawing/library a requirement? is there an alternative? another quick and dirty solution? console.log(image); // what can we do here to serve the image onto an img tag? } });

gracias por leer

Actualizar:

después de los fragmentos de código de abajo, también se necesita cambiar la variable "buffer" a image.buffer para que la imagen se muestre correctamente

básicamente cambiar la línea de

img.src = ''data:image/jpeg;base64,'' + buffer;

A

img.src = ''data:image/jpeg;base64,'' + image.buffer;


Una posible solución es codificar64 base los datos de la imagen y usarlos en el navegador a través de image.src :

Del lado del servidor, intente cambiar esto:

socket.emit(''image'', { image: true, buffer: buf });

a esto:

socket.emit(''image'', { image: true, buffer: buf.toString(''base64'') });

Luego en el lado del cliente:

var ctx = document.getElementById(''canvas'').getContext(''2d''); // ... socket.on("image", function(info) { if (info.image) { var img = new Image(); img.src = ''data:image/jpeg;base64,'' + info.buffer; ctx.drawImage(img, 0, 0); } });