我正在用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)
}
问题:在循环运行disconnect
时,套接字(2)
事件是否存在从connections
对象中删除项(3)
的风险抛出错误?如果是这样,最佳做法是什么?
我可以&#34;标记它&#34;要删除,只在循环完成后删除它,但是有必要吗?谢谢!
答案 0 :(得分:3)
没有风险。
JS进程是单线程的,在循环完成之前不会触发回调。
答案 1 :(得分:2)
不需要,节点运行您的代码单线程。只要迭代时执行的操作是同步的,socket.io回调就不会交错。