2010-09-23 11 views
5

¿Cómo se manejan los eventos de nodo? ¿Uno a la vez o concurrente?El acceso simultáneo a la matriz compartida es un problema en Node.js

necesito saber, si no va a ser el acceso simultáneo a una matriz común, como en el siguiente ejemplo:

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

Cuando un cliente se conecta, su zócalo es empujado a la matriz. Cuando la conexión está cerrada, quiero eliminarla de la matriz de conexiones.

Pero, en otros idiomas, esto podría generar problemas de simultaneidad.

Fx. Si dos conexiones está cerrado al mismo tiempo:

  • Conexión A encuentra su zócalo en el índice de 4
  • Conexión B encuentra su zócalo en el índice de 5
  • Conexión A borra a sí mismo de índice 4
  • Conexión B se borra del índice 5 (pero ahora es el índice 4)

¿Será esto un problema, o puedo asumir que solo se maneja una devolución de llamada a la vez?

Respuesta

8

No, esto no será un problema, porque su código node.js se ejecuta en una sola cadena. No tendrá la misma función llamada simultáneamente.

Cuestiones relacionadas