在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); 

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

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

FX。 如果两个连接同时closures:

  • 连接A在索引4中find它的套接字
  • 连接B在索引5中find它的套接字
  • 连接A从索引4删除自己
  • 连接B从索引5中删除自己(但现在是索引4)

这会永远是一个问题,或者我可以假设一次只处理一个callback?

不,这不会是个问题,因为你的node.js代码是在一个线程中执行的。 你不会有同样的function同时被调用。