2017-11-23 8 views
0

この問題で苦労しているのは私だけではないようです。NodeJSが特定の部屋に放射する[socket.io]

しかし、私は簡単なチャットアプリケーションを作成しようとしています。ユーザーがルームに参加すると、roomIDはsocket.room.idに保存されます。ただの数字。彼らは/更衣室に参加すると

、私は次のコードを持っている:

// Notify the rooms 
if(previousRoomID) io.to(previousRoomID).emit("activity-notification","<b>"+socket.me.name+"</b> has left the room " + previousRoomID); 

io.to(socket.room.id).emit("activity-notification","<b>"+socket.me.name+"</b> has joined the room " + socket.room.id); 

それでは、previousRoomID = 1、およびsocket.room.id = 30としましょう。

メッセージを送信しますが、どちらもすべてユーザーに送信されているようです。私はroomID 1で午前、ユーザーが部屋を離れた場合、私は次のメッセージを得る:

user has left the room 1 
user has joined the room 30 

私はまだ、io.to(socket.room.id).emit()に送信していたコードで上記ので、私は、第2のメッセージを見ることができるはずの私が部屋1にいるときでも、私はこのメッセージを受けています。

奇妙なことにも、私はそれを呼んでいないにもかかわらず、放送機能も使っているようです。イベントを発生させたユーザー以外のすべてのユーザーに送信します。

私は間違っていますか?

答えて

0

これはわかりました。問題は、私は

socket.join(roomID)

を呼んでいた。しかし、私は最初の部屋を残していませんでしたでした。だから、ソケットが複数の部屋に参加できることが分かりました。それはなぜ私が両方のメッセージを見ていたのかを説明するでしょう。

if(previousRoomID) socket.leave(previousRoomID); 
socket.join(roomID) 
if(previousRoomID) io.to(previousRoomID).emit("activity-notification","<b>"+socket.me.name+"</b> has left the room"); 
io.to(socket.room.id).emit("activity-notification","<b>"+socket.me.name+"</b> has joined the room"); 

私は理論的には、メッセージが誰に行くが、何らかの理由activity-notificationを取得doesntのio.to.emitラインを呼び出し、ソケットのしなければならない、しかし放送の機能を理解しません。

関連する問題