javascript - 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
. 他们是更新原始版本,还是在开始时获得副本?你能帮助我吗?
解决方案
推荐阅读
- python - 如何使用 Visual Studio Code 在 Python 中将文件读取为相对路径?
- ios - 在swift 4中为相关注释添加标题和副标题
- apache-spark - 从 Apache Spark 将数据上传到 HBase 的正确方法是什么?
- python-3.x - 多重继承:接受 0 个位置参数,但给出了 1 个
- python - setuptools.setup 对所有元数据关键字有什么作用?
- reactjs - 如何保存以前的道具以在 componentDidUpdate() 中使用?
- ios - 编程 .beginRefresh() 不刷新 UITableView 中的数据
- python - 下载图像但 urllib.error.HTTPError
- python - 使用 for 循环进行二分搜索,在列表中搜索单词并进行比较
- botframework - 如何使用 appinsights 调用我们自己的 qnamakerservice