我正在使用 Node.js 和 Socket.io 编写一个小型聊天应用程序。我有一个对象,connections
,它保留对所有实时连接的引用,例如(伪代码):
var connections = {};
...
io.on("connection", function(socket)){
connections[socket.id] = socket; // (1)
socket.on("disconnect", function(){
delete connections[socket.id]; // (2)
});
}
现在,在代码的另一部分中,我迭代连接对象,例如:
for (var i=0; i<connections.length; i++) {
// do something with connections[i] // (3)
}
问题:当循环运行 (3)
时,套接字的 disconnect
事件是否会从 connections
对象中删除项目 (2)
并引发错误?如果是这样,最佳实践是什么?
我可以将其“标记”为删除,并仅在循环完成后将其删除,但有必要吗?谢谢!
最佳答案
不需要, Node 单线程运行您的代码。只要您在迭代时执行的操作是同步的,socket.io 回调就不会交错。
关于javascript - 我需要担心 Node.js 中的并发修改吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38319649/