web-dev-qa-db-ja.com

node.js socket.io特定のクライアントに出力する方法は?

別のクライアントで受信した別のメッセージに基づいて選択された特定のクライアントにメッセージを「送信」したいのですが、どうすればよいですか。

各クライアントを自分の「部屋」に参加させて放送することを考えています。もっと良い方法はありますか?

23
srinathhs

socket.ioバージョン1.0以降のUPDATE

io.to(socketid).emit('message', 'whatever');

古いバージョンの場合:

各クライアントをプロパティとしてオブジェクトに保存できます。次に、メッセージに基づいてソケットを検索できます。

var basket = {};

io.sockets.on('connection', function (socket) {
  socket.on("register", function(data) {
    basket[data.nickname] = socket.id;
  });
  socket.on("privmessage", function(data){
    var to = basket[data.to];
    io.sockets.socket(to).emit(data.msg);
  });
});

テストされていません...しかし、それはあなたにアイデアを与えるはずです

33

Socket.ioバージョン1.0の場合:

io.to(socketid).emit('message', 'whatever');
18
Minho Lee

Socket.io v1.0 <の場合:

io.to(socketID).emit('testEvent', 'yourMessage');

0
Michael Pigle

SocketIDを使用して特定のクライアントに送信する。

サーバー/パッケージ:socket.io:

io.to(socketID).emit('testEvent', 'yourMessage');

Client /パッケージsocket.io-client:

io.sockets.on('connection',(socket) => {
  socket.on("testEvent", data => {
    console.log(data);
  });
});

次の方法でsocketIDにアクセスできます。

io.on('connection', (socket, next) => {
    const ID = socket.id // id property on the socket Object
})

単にsocketオブジェクトのプロパティです

0