socket.io客户端不接收来自服务器的消息

我试图用两个客户端来实现一个系统,其中一个发送一个消息,另一个接收它。 下图将以更直观的方式解释它:

socket.io消息通信图

因此,客户端1将消息发送到服务器(并且这是有效的),服务器接收到“推送”消息并发出应该由客户端2拾取的“popup”消息。这里的问题是客户端2从不接收“stream行”消息。 🙁

这是所有这些代码。

SERVER.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' }); }); }); 

客户端1(又名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> 

客户端2(又名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> 

我只是无法理解客户端2没有收到“pop”消息的原因,我对socket.io和node.js一般都比较陌生,所以有些机制对我来说还是有点模糊,所以我提前道歉我的不高兴 🙂

干杯

-K-

       

网上收集的解决方案 "socket.io客户端不接收来自服务器的消息"

为每个套接字调用传递给.on的函数来执行初始化(绑定事件等),并且socket引用当前套接字。 当你接收到push消息时,这将是客户端1,因为处理函数绑定到该socketpush事件 – 当客户端1连接(其中socket引用客户端1)时,你绑定了该函数。

io.sockets是指连接的所有套接字,所以包括客户端2在你的情况。

你可以考虑的另一个方面是使用:

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

这实际上将消息发送到除了发起消息的所有连接的客户机之外。 删除过滤客户端的任务/减less不必要的stream量到原始套接字。

GitHub上的Socket.IO – 正在广播中。