2010-09-23 2 views
5

In che modo vengono gestiti gli eventi di gestione dei nodi? Uno alla volta o simultaneo?L'accesso simultaneo all'array condiviso è un problema in Node.js

Ho bisogno di sapere, se ci sta per essere l'accesso simultaneo a una matrice comune, come nel seguente esempio:

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

Quando un client si connette, il suo zoccolo viene spinto alla matrice. Quando la connessione è chiusa, voglio rimuoverlo dalla matrice di connessioni.

Tuttavia, in altre lingue ciò potrebbe causare problemi di concorrenza.

Fx. Se due connessioni è chiuso allo stesso tempo:

  • Connection trova la sua presa nell'indice 4
  • Connection B trova la sua presa nell'indice 5
  • Connection si elimina dall'indice 4
  • Connection B si cancella dall'indice 5 (ma è ora indice 4)

Questo sarà mai un problema o posso supporre che venga gestita una sola callback alla volta?

risposta

8

No, questo non sarà un problema, perché il codice node.js viene eseguito in un singolo thread. Non avrai la stessa funzione chiamata contemporaneamente.