1

私はnodejsとsocketioを使用しています。選択したユーザーにメッセージを送信するプライベート チャット アプリを作成しました。

私の現在のコードは次のとおりです。

          chat_room.sockets.socket(user).emit(
                'chat', 
                { 
                    message : message,
                    from : sockets[socket.id].username
                }
            );

ルームを作成し、特定のルームのユーザーにメッセージを送信したいと考えています。

以下のコードを試しましたが、動作しません

socket.get('room', function(err, room) {
         chat_room.sockets.socket(room)(user).emit(
                'chat', 
                { 
                    message : message,
                    from : sockets[socket.id].username
                }
            );

});

それは間違っていて、エラーが発生しました:

\Users\Niraj\Desktop\node\joomla-chat\node_modules\socket.io\lib\manager.js:487:38) WebSocket.Transport.onMessage (C:\Users\Niraj\Desktop\node\joomla-chat) \node_modules\socket.io\lib\transport.js:387:20) パーサーで。(C:\Users\Niraj\Desktop\node\joomla-chat\node_modules\socket.io\lib\transports\websocket\hybi-16.js:39:10) Parser.EventEmitter.emit (events.js:96) :17)

ルームの特定のユーザーにメッセージを送信するにはどうすればよいですか

- - - - - - - - - - - - - - - -編集 - - - - - - - - - ---------- だから私がする場合:

socket.get('room', function(err, room) {
              chat_room.sockets.socket(user).emit(
                    'chat', 
                    { 
                        message : message,
                        from : sockets[socket.id].username
                    }
                );

        });

次に、これにより、X氏へのメッセージがABCルームに送信されます

私は正しいですか?

4

1 に答える 1

8

連絡したいユーザーが部屋にいるかどうかに関係なく、適切な識別情報があれば、連絡する最も簡単な方法は単純な socket.emit() です。

あなたはすでにsocket.idを持っていると述べました。その場合、ソケット オブジェクトを取得するのは次のように簡単ですio.sockets.sockets[socket.id]

メッセージを送信するには、次のように言うことができます。io.sockets.sockets[socket.id].emit('identifier', data);

それはあなたの質問に答えるはずですが、これらはあなたが役立つかもしれない2つの追加事項です:

-注目している部屋全体にブロードキャストするには:io.sockets.in('room').emit('event_name', data)

- io.sockets 内に保存されている部屋と接続されたソケットの両方に関する非常に豊富な情報があります。console.log(io.sockets);コードの先頭に a を配置し、オブジェクトを詳しく調べて、他にアクセスできるものを確認することを強くお勧めします。

お役に立てれば!

于 2013-01-20T08:36:02.960 に答える