一尘不染

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

node.js

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

服务器端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");
  });
});

阅读 219

收藏
2020-07-07

共1个答案

一尘不染

实际上,它根本没有向其他客户端发送更新,而只是向刚刚连接的客户端发送(这就是为什么您在初次加载时看到更新的原因)

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

相反,您想发射到 所有 套接字

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

另外,您可以使用广播功能,该功能向启动该套接字的套接字以外的所有人发送消息:

socket.broadcast.emit('users_count', clients);
2020-07-07