specific socket rooms node example javascript node.js websocket socket.io

javascript - rooms - socket.io server



cliente socket.io no recibe mensajes del servidor (2)

Estoy intentando implementar un sistema con dos clientes, uno de ellos envía un mensaje y el otro lo recibirá. La siguiente figura lo explicará de una manera más visual:

Entonces, el cliente 1 envía el mensaje al servidor (y esto funciona), el servidor recibe un mensaje "push" y emite un mensaje "pop" que debe ser recogido por el Cliente 2. El problema aquí es que el Cliente 2 nunca recibe el mensaje "pop". :(

Aquí está el código para todos ellos.

SERVIDOR.JS

var app = require(''express'').createServer() , io = require(''socket.io'').listen(app); app.listen(999); app.get(''/webclient'', function (req, res) { res.sendfile(__dirname + ''/web.html''); }); app.get(''/mobile'', function (req, res) { res.sendfile(__dirname + ''/mobile.html''); }); io.sockets.on(''connection'', function (socket) { // socket.emit(''pop'', { hello: ''world'' }); socket.on(''push'', function (data) { console.log(''push received, emitting a pop''); socket.emit(''pop'', { hello: ''world'' }); }); });

CLIENTE 1 (también conocido como mobile.html)

<html> <head> <title> Mobile </title> <script src="/socket.io/socket.io.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/mootools/1.4.5/mootools-yui-compressed.js" type="text/javascript"></script> <script> var socket = io.connect(''http://localhost:999''); </script> </head> <body> <input type="button" name="act" id="push" value="message" /> <script type="text/javascript" charset="utf-8"> window.addEvent(''domready'', function() { $(''push'').addEvent(''click'', function() { socket.emit(''push'', { hello: ''world'' }); }); }); </script> </body> </html>

CLIENTE 2 (también conocido como web.html)

<script src = "/socket.io/socket.io.js"></script> <script> var socket = io.connect(''http://localhost:999''); socket.on(''pop'', function (data) { console.log(data); }); </script>

Simplemente no puedo entender la razón por la que el Cliente 2 no recibe el mensaje "pop", soy bastante nuevo en socket.io y node.js en general, por lo que algunos mecanismos para mí aún son un poco confusos, así que me disculpo por adelantado por mi noobness :)

aclamaciones

-k-


Otro aspecto que puedes tener en cuenta es el uso de:

socket.broadcast.emit(''push'', { hello: ''world'' });

Lo que esencialmente enviaría el mensaje a todos los clientes conectados, excepto al que originó el mensaje. Eliminando la tarea de filtrar clientes / reduciendo el tráfico innecesario al socket de origen.

Socket.IO en GitHub - En difusión.


Se .on a la función pasada a .on para que cada socket realice la inicialización (eventos de enlace, etc.), y el socket refiere a ese socket actual. Este será el cliente 1 cuando reciba un mensaje de push , ya que la función del controlador está vinculada al evento de push de ese socket ; usted enlazó esa función cuando el cliente 1 estaba conectado (donde socket refiere al cliente 1).

io.sockets refiere a todos los sockets conectados, por lo que incluye el cliente 2 en su caso.