簡體   English   中英

Socket.IO:從房間中刪除特定的 socket_id?

[英]Socket.IO: Remove specific socket_id from room?

我有一個特定的 socket_id,我想從 socket.io 的房間中刪除它。 是否有捷徑可尋? 我能找到的唯一方法是通過套接字本身斷開連接。

從客戶端,您將自己的消息發送到服務器並要求服務器將其從房間中刪除。 然后,服務器可以使用socket.leave("someRoom")從給定房間中刪除該套接字。 客戶不能自己加入或離開房間。 加入和離開房間必須由服務器完成(因為聊天室的整個概念只存在於服務器上)。

文檔在這里

對於 socket.io 4.0.0 以上版本(我的是 4.4.0 版本):

步驟 #1) 您必須獲取連接到該 socket.id 的套接字數組,如下面的代碼所示。

//You can replace the userStatus.socketId to your own socket id, that was what I 
//used in my own case    
const userSockets = await io.of("/chat").in(userStatus.socketId).fetchSockets();

步驟#2)在獲取所有套接字 ID 后,您將獲得一個包含單個套接字的數組(我通過記錄服務器上 io 庫提供的 async 和 await fetchSockets() 方法的結果來了解這一點)。 然后使用 .find() 方法再次返回匹配相同套接字 id 的單個套接字對象,如下所示。

const userSocket = userSockets.find(socket => socket.id.toString() === userStatus.socketId);

// 用自己的socket ID替換userStatus.socketId

步驟#3) 使用 socket.io 庫的 .leave() 方法離開組,刪除套接字,如下所示。

userSocket.leave(groupId);
// groupId can be replaced with the name of your room

最后說明:我希望這對將來的某人有所幫助,因為這是我使用的並且對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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