![](/img/trans.png)
[英]Socket.io - Cannot emit to a specific room but can emit to everyone
[英]NodeJS emit to specific room [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()
,但是即使我在房間1中,我也會收到此消息。
同樣奇怪的是,即使我沒有稱呼它,它似乎也在使用廣播功能。 像這樣-將其發送給引發該事件的用戶以外的所有用戶。
我究竟做錯了什么?
好吧,我知道了。 問題是我在打電話
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");
雖然我不了解廣播功能,但從理論上講,消息應該發送給每個人,但是由於某種原因,調用io.to.emit
行的套接字沒有收到activity-notification
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.