specific socket metodos example all sockets node.js socket.io

sockets - metodos - socket io send to all



socket.emit() vs. socket.send() (6)

¿Cuál es la diferencia entre estos dos?

Noté que si cambiaba de socket.emit a socket.send en un programa en funcionamiento, el servidor no recibía el mensaje, aunque no entiendo por qué.

También noté que en mi programa si cambiaba de socket.emit a socket.send , el servidor recibe un mensaje, pero parece que lo recibe varias veces. Cuando uso console.log() para ver lo que el servidor recibió, muestra algo diferente de cuando uso socket.emit .

¿Por qué este comportamiento? ¿Cómo sabes cuándo usar socket.emit o socket.send ?


Con socket.emit puedes registrar un evento personalizado como ese:

servidor:

var io = require(''socket.io'').listen(80); io.sockets.on(''connection'', function (socket) { socket.emit(''news'', { hello: ''world'' }); socket.on(''my other event'', function (data) { console.log(data); }); });

cliente:

var socket = io.connect(''http://localhost''); socket.on(''news'', function (data) { console.log(data); socket.emit(''my other event'', { my: ''data'' }); });

Socket.send hace lo mismo, pero no te registras a ''noticias'' sino a un mensaje:

servidor:

var io = require(''socket.io'').listen(80); io.sockets.on(''connection'', function (socket) { socket.send(''hi''); });

cliente:

var socket = io.connect(''http://localhost''); socket.on(''message'', function (message) { console.log(message); });


En los sistemas de comunicación bidireccionales básicos, socket.emit ha demostrado ser más convincente y fácil de usar (experiencia personal) y es parte de Socket.IO que está principalmente diseñado para tales propósitos


Simple y preciso (Fuente: Socket.IO google group ):

socket.emit permite emitir eventos personalizados en el servidor y el cliente

socket.send envía mensajes que se reciben con el evento ''message''


TL; DR:

socket.send(data, callback) es esencialmente equivalente a llamar a socket.emit(''message'', JSON.stringify(data), callback)

Sin mirar el código fuente, supongo que la función de envío es la edición más eficiente : ¿para enviar mensajes de cadena, al menos ?

Entonces, básicamente, emitir te permite enviar objetos, lo cual es muy útil.

Toma este ejemplo con socket.emit :

sendMessage: function(type, message) { socket.emit(''message'', { type: type, message: message }); }

y para aquellos que mantienen puntaje en casa, aquí está lo que parece usar socket.send :

sendMessage: function(type, message) { socket.send(JSON.stringify({ type: type, message: message })); }



socket.send está implementado para compatibilidad con la interfaz WebSocket de vanilla. socket.emit es una característica de Socket.IO solamente. Ambos hacen lo mismo, pero socket.emit es un poco más conveniente en el manejo de mensajes.