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.