使用Socket.io更新所有客户端?

是否有可能强制所有的客户端使用socket.io更新? 我已经尝试了以下,但是当新的客户端连接时似乎没有更新其他客户端:

Serverside JavaScript:

我试图发送消息给所有的客户端,其中包含当前连接的用户数量,它正确地发送的用户数量….但客户端本身似乎并没有更新,直到页面被刷新。 我希望这是发生的实时。

var clients = 0; io.sockets.on('connection', function (socket) { ++clients; socket.emit('users_count', clients); socket.on('disconnect', function () { --clients; }); }); 

客户端JavaScript:

 var socket = io.connect('http://localhost'); socket.on('connect', function(){ socket.on('users_count', function(data){ $('#client_count').text(data); console.log("Connection"); }); }); 

这实际上并不是实际上向其他客户端发送更新,而是发送给刚刚连接的客户端(这就是为什么您在第一次加载时会看到更新)

 // socket is the *current* socket of the client that just connected socket.emit('users_count', clients); 

相反,你想要发射到所有的套接字

 io.sockets.emit('users_count', clients); 

或者,您可以使用广播function,它将消息发送给除启动它的套接字外的所有人:

 socket.broadcast.emit('users_count', clients); 

我发现使用socket.broadcast.emit()将只广播到当前的“连接”,但io.sockets.emit将广播给所有的客户端。 在这里服务器正在监听“两个连接”,这两个连接完全是2个套接字的命名空间

 io.of('/namespace').on('connection', function(){ socket.broadcast.emit("hello"); }); io.of('/other namespace').on('connection',function(){/*...*/}); 

我试图在一个命名空间中使用io.sockets.emit() ,但是在另一个命名空间中由客户端收到。 但是socket.broadcast.emit()只会广播当前套接字命名空间。

从socket.io 0.9版开始,“emit”不再适用于我,而且我一直使用“send”

这是我正在做的事情:

服务器端

 var num_of_clients = io.sockets.clients().length; io.sockets.send(num_of_clients); 

客户端:

 ws = io.connect... ws.on('message', function(data) { var sampleAttributes = fullData.split(','); if (sampleAttributes[0]=="NumberOfClients") { console.log("number of connected clients = "+sampleAttributes[1]); } });