1. ホーム
  2. javascript

[解決済み] Socket.ioを使用しているすべてのクライアントを更新しますか?

2023-07-07 11:33:08

質問

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");
  });
});

どのように解決するのですか?

実際には他のクライアントに更新を送信しておらず、代わりに接続したばかりのクライアントに送信しています (最初にロードしたときに更新が表示されるのはこのためです)。

// 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);