Jac*_*ack 74 javascript node.js socket.io
是否可以使用socket.io强制所有客户端更新?我尝试了以下内容,但在新客户端连接时似乎没有更新其他客户端:
我正在尝试向所有客户端发送一条消息,其中包含当前连接的用户数,它正确地发送了大量用户....但是,在刷新页面之前,客户端本身似乎没有更新.我希望这发生是实时的.
var clients = 0;
io.sockets.on('connection', function (socket) {
++clients;
socket.emit('users_count', clients);
socket.on('disconnect', function () {
--clients;
});
});
Run Code Online (Sandbox Code Playgroud)
var socket = io.connect('http://localhost');
socket.on('connect', function(){
socket.on('users_count', function(data){
$('#client_count').text(data);
console.log("Connection");
});
});
Run Code Online (Sandbox Code Playgroud)
Mat*_*att 178
它实际上并没有向其他客户端发送更新,而只是向刚刚连接的客户端发送更新(这就是您第一次加载时看到更新的原因)
// socket is the *current* socket of the client that just connected
socket.emit('users_count', clients);
Run Code Online (Sandbox Code Playgroud)
相反,您想要发射到所有套接字
io.sockets.emit('users_count', clients);
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用广播功能,该功能向除了启动它的套接字之外的所有人发送消息:
socket.broadcast.emit('users_count', clients);
Run Code Online (Sandbox Code Playgroud)
hou*_*han 13
我发现,使用socket.broadcast.emit()将只播放当前的"连接",但io.sockets.emit将广播到所有的客户.这里服务器正在监听"两个连接",这两个连接是完全2个套接字命名空间
io.of('/namespace').on('connection', function(){
socket.broadcast.emit("hello");
});
io.of('/other namespace').on('connection',function(){/*...*/});
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用io.sockets.emit()在一个命名空间,但它是由客户在其他命名空间接收.但是socket.broadcast.emit()只会广播当前的套接字命名空间.
| 归档时间: |
|
| 查看次数: |
71283 次 |
| 最近记录: |