并发访问共享阵列是Node.js中的一个问题

Mic*_*sen 6 node.js

节点处理事件如何?一个当时,还是并发?

我需要知道,如果要同时访问共享数组,如下例所示:

var ws          = require("./ws.js"),
    connections = [];

ws.createServer(function( socket ){

  // add to connection array
  socket.on('connect', function(){
    connections.push(socket);
  });

  // remove from connection array
  socket.on('close', function(){
    var i = connections.indexOf(socket);
    connections.splice(i,1);
  });

}).listen(8000);
Run Code Online (Sandbox Code Playgroud)

当客户端连接时,其套接字被推送到数组.当连接关闭时,我想从连接数组中删除它.

但是,在其他语言中,这可能会导致并发问题.

FX.如果两个连接同时关闭:

  • 连接A在索引4中查找其套接字
  • 连接B在索引5中找到其套接字
  • 连接A从索引4中删除自身
  • 连接B从索引5中删除自己(但它现在是索引4)

这会是一个问题,还是我可以假设一次只处理一个回调?

Cao*_*lan 9

不,这不会有问题,因为你的node.js代码是在一个线程中执行的.您不会同时调用相同的函数.