2016-10-20 5 views
0

グループと同じ機能を実現しようとしていますが、ユーザーは同時に複数のルームに接続します。ソケットIoユーザー2つのルームに接続すると、同じウィンドウ内の両方のルームからメッセージを取得します

のは、それぞれの部屋AとB.私はsocket.broadcast.to(A).emitを行うと、両方のユーザーが、それらの両方が別の部屋に接続されているにもかかわらず、同じウィンドウにメッセージを取得しているに接続された2人のユーザー1と2を、想像してみましょう

私はユーザーがデータベースから接続されているgroupsListを取得します。私は

for(var i=0;i<groupsList.length;i++){ 
     var groupName = groupsList[i].Id.toString(); 
     socket.join(groupName); 
    } 

メッセージフォームクライアント側がクライアント側

Iに

socket.on('send-Group-Message',function(data){ 
    socket.broadcast.to(groupIdString).emit('group_message',{msg:message,date:Datesent,senderUsername:socket.nickname,senderDisplayName:displayName}) 
    socket.emit('myGroup_message',{msg:message,date:Datesent,senderDisplayName:displayName}); 
}); 

その後、サーバ側で

socket.emit('send-Group-Message', {msg:messageBox.val(),"groupId":$("#connectedGroup").val()}); 

を使用して送信されるのgroupIdを使用していますどのグループがthに関連付けられているかを調べることができますeメッセージをクライアント側から送信しますが、これが正しい方法であるかどうかはわかりません。

どうすれば部屋をきれいに分離できますか?

+1

私はできるだけ壊れた英語を修正しました。悲しいことに、コード*サンプル*なしであなたを助ける方法はありません。具体的にはどのように客室を管理し、どのようにメッセージを送信しますか? – DrakaSAN

+0

コードサンプルを追加しました –

答えて

4

アプリ内の複数の部屋にソケットがあり、受信側のクライアントがメッセージの発信元を知りたい場合は、メッセージがメッセージブロードキャストに含まれるroomを含める必要があります。

socket.broadcast.to(A).emit("newMsg", {room: A, msg: "some Message Here"}); 

次に、受信側クライアントは、メッセージデータとそれに対応するルーム名の両方を取得し、クライアントはそのメッセージをその部屋に適したページ上の対応するウィジェットに表示できます。

ブロードキャストは、ブロードキャストされたルームを示すものではありません。部屋は実際にはソケットをグループ化するための単なるサーバー側の概念です。部屋に放映されると、それは文字通りソケットのリストを取得し、リスト内の各ソケットを繰り返して、目的のメッセージを送信します。実際にメッセージと共に送られた部屋の概念はありません。したがって、上記のように、受信者にメッセージが対応するルームを知りたければ、明示的にメッセージを送信する必要があります。

関連する問題