簡體   English   中英

NodeJS發射到特定房間[socket.io]

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM