首页 > 解决方案 > NodeJS,对同一个变量的多次访问

问题描述

我正在尝试使用 websockets 构建房间和组(我知道有 socket.io,但我必须使用本机 websockets)

我想知道如何安全地更新我的组数组:它看起来像这样:

let socketStore = {10:[ws1, ws2], 20:[ws3, ws3]}

10 和 20 是组 ID,websocket 存储在数组中。

想象一下这个套接字关闭他的连接的代码:

ws.on("close", ()=>{
        let userId = ws.userId;
        try{
            Object.keys(socketStore).forEach((groupId)=>{
                if(socketStore[groupId].length === 1){
                    //what if after that a user joined again?
                    delete socketStore[groupId];
                    console.log("delete group key")
                }else{
                    let index = socketStore[groupId].findIndex(ws => ws.userId ===userId)
                    if(index != -1){
                        socketStore[groupId].splice(index, 1)
                        console.log("delete user socket")
                    }
                }
            })
        }catch(err){
            console.log(err)
        }
    })

所以我遍历所有组 id 并检查用户是否是该组的成员。此外,我检查是否只剩下一个成员,所以我可以删除组密钥。但是,如果之后if(socketStore[groupId].length === 1)另一个套接字连接并被添加到数组中?但是尽管现在里面有两个用户,但数组仍然会被删除。还是socketStore这个 if 条件中的对象只是全局对象的副本?

我可以确定在那个 if 条件socketStore中没有改变吗?

我不知道 NodeJS 如何处理对同一个变量的这种多重访问。

此外,更新socketStore. 他们是更新原始版本,还是在开始时获得副本?你能帮助我吗?

标签: javascriptnode.jswebsocket

解决方案


推荐阅读