2012-04-30 2 views
5

Ho un server socket.io che ascolta i socket:Il multithread Socket.IO?

io.sockets.on('connection', function(socket){ 
    socket.on('myEvent', function(data){ 
     socket.emit('eventReceived', { status: 1 }); 
    }); 
}); 

È questo codice funzionante in multithread? se due client emetteranno l'evento myEvent, funzionerà allo stesso tempo per entrambi i client? o sarà gestito uno dopo l'altro?

Grazie mille!

+1

No, non è multithreaded. Node.js utilizza un ciclo di eventi a thread singolo. Vedi [questa risposta] (http://stackoverflow.com/questions/9362823/why-is-a-function-and-a-callback-non-blocking-in-node-js/9363071#9363071) del mio per un ulteriori spiegazioni. –

+0

Se il Node.js non è multithread, significa che anche Socket.IO non è multithreading? – udidu

+1

Esattamente. Puoi scalare eseguendo un backend distribuito per la messaggistica, c'è un [redis store] (https://github.com/LearnBoost/socket.io/blob/master/lib/stores/redis.js) integrato. –

risposta

1

Nulla in Node.js è multithreading inclusi eventuali pacchetti disponibili tramite npm. C'è un modulo gruppo sperimentale disponibili nel core

http://nodejs.org/docs/v0.10.2/api/cluster.html

+0

Solo perché Node.js ha un singolo ciclo di eventi non significa che i processi asincroni sotto il cofano, dietro le quinte, non siano multi-thread. Perché molti lo sono. Ecco un articolo che affronta un problema al riguardo: https://www.future-processing.pl/blog/on-problems-with-threads-in-node-js/ – user1588877