javascript - 我需要担心 Node.js 中的并发修改吗?

标签 javascript node.js concurrency socket.io

我正在使用 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/

相关文章:

node.js - HapiJS 代理问题

c++ - 图像处理中的并发设计

java - quartz : preventing concurrent instances of a job in jobs. xml

Javascript - 类似序列数组的对象

javascript - Highcharts 工具提示在内容更改时自动调整大小

node.js - 对摘要身份验证的错误请求(用户 : false)

ios - 异步执行但同步写入

javascript - 当 API 不允许 Access-Control-Allow-Origin 时该怎么办

javascript - 检查单击时是否存在类(React)

node.js - Angular2开发没有node和npm