gpt4 book ai didi

javascript - 如何在 Node js 中使用 ws (Websocket) 包创建/加入聊天室

转载 作者:行者123 更新时间:2023-12-01 15:35:34 27 4
gpt4 key购买 nike

我正在使用 ws 在服务器端打包,我希望客户端在服务器套接字中创建/加入房间。并在它们不再连接时将它们从创建的房间中删除。
PS:我不想使用socketIo。

最佳答案

您可以尝试以下方法:

const rooms = {};

wss.on("connection", socket => {
const uuid = ...; // create here a uuid for this connection

const leave = room => {
// not present: do nothing
if(! rooms[room][uuid]) return;

// if the one exiting is the last one, destroy the room
if(Object.keys(rooms[room]).length === 1) delete rooms[room];
// otherwise simply leave the room
else delete rooms[room][uuid];
};

socket.on("message", data => {
const { message, meta, room } = data;

if(meta === "join") {
if(! rooms[room]) rooms[room] = {}; // create the room
if(! rooms[room][uuid]) rooms[room][uuid] = socket; // join the room
}
else if(meta === "leave") {
leave(room);
}
else if(! meta) {
// send the message to all in the room
Object.entries(rooms[room]).forEach(([, sock]) => sock.send({ message }));
}
});

socket.on("close", () => {
// for each room, remove the closed socket
Object.keys(rooms).forEach(room => leave(room));
});
});
这只是一个草图:您需要处理离开房间、与客户断开连接(离开所有房间)以及在没有人再进来时删除房间。

关于javascript - 如何在 Node js 中使用 ws (Websocket) 包创建/加入聊天室,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62370962/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com