3

基本的なクライアントからクライアントへ (または実際にはクライアント -> サーバー -> クライアント) を socket.io で動作させるのに問題があります。私が今持っているコードは次のとおりです。

io.sockets.on('connection', function (socket) {

users.push(socket.sessionId);

for(userID in users)    {
    console.log(userID);
    io.sockets.socket(userID).emit('message', { msg: 'New User Connected succesfully' });
}
socket.emit('message', { msg: 'Connected succesfully' });


socket.on('my other event', function (data) {
    console.log(data);
  });
});

私の理解では、接続されているすべてのユーザーに新しいユーザーメッセージを送信する必要があります(後で実際の個々のメッセージを送信したいため、個別に)。代わりに、最後に「正常に接続されました」というメッセージのみが表示されます。サーバーまたはクライアントからエラーやその他の否定的な兆候はありません。

io.sockets.socket(userID).emit()なぜ機能しないのか、代わりに何を使用するのかについてのアイデアはありますか?

4

3 に答える 3

5

Socket.io にはルームの概念があり、ソケットがルームに参加すると、ルームに送信されたすべてのメッセージを受信するため、ルームに誰がいるかを追跡したり、切断に対処したりする必要はありません...

接続時には、次を使用します。

socket.join('room')

そして、その部屋の全員にメッセージを送信するには:

io.sockets.in('room').emit('event_name', data)

socket.io wiki の詳細: https://github.com/LearnBoost/socket.io/wiki/Rooms

于 2013-03-06T20:24:31.583 に答える
2

試す

users.push(socket); // without .sessionId

for (var u in users)    {
   // users[u] is now the socket
   console.log(users[u].id);
   users[u].emit('message', { msg: 'New User Connected succesfully' });
}
于 2013-03-06T20:28:53.023 に答える
1

また、使用できるようになりました...

io.to('room').emit('event_name', data);

io.sockets.in の代替として

于 2016-06-27T11:47:37.327 に答える