2012-04-15 15 views
21

Ho un sito Web che implementa il broadcast.emit. che invia un messaggio a tutti gli utenti del sito. È solo l'implementazione più semplice di socket.io ma al momento ho un problema. Quando raggiungo circa 100 utenti simultanei. Il server nodejs inizia a ritardare finché non si blocca che non posso più accedere al mio intero sito web. Quando abbiamo controllato il server. Il nodojs sta prendendo il 100% della CPU. È normale?Quanti utenti Nodejs e Socket.io possono supportare?

Mi chiedevo quanti utenti può supportare socket.io? E quando succede questa cosa c'è un modo per riavviare il server nodejs in modo programmatico?

+1

Puoi darci qualche informazione sulle specifiche del server? – UpTheCreek

risposta

15

At least 250k connessioni simultanee (e per la maggior parte dei casi d'uso collo di bottiglia è memoria)

+0

Grazie Andrey. In realtà nessun problema nella memoria del server. Utilizza meno del 5% della memoria del server. Inoltre ho dimenticato di menzionare che il nodo è nella stessa casella del mio server web & db – 3s2ng

+11

250k di cui sopra è un tipo di benchmark HelloWorld senza socket.io. In realtà c10k è vicino al reale (a seconda della complessità della CPU e dell'applicazione). Ad esempio, per un gioco di carte che sto eseguendo, ho raggiunto il 100% di utilizzo della CPU all'incirca di c3k. –

+1

1m connessioni simultanee - http://blog.caustik.com/2012/08/19/node-js-w1m-concurrent-connections/ –

3

E 'importante per voi di consegnare il messaggio a tutti i clienti senza farla cadere? Se no, proporrei di utilizzare la chiamata socket.volatile.emit. Ci possono essere molti problemi con i client remoti e i collegamenti non stabili.

+0

Il messaggio consegnato ai clienti è importante. I dati di Coz su tutti gli utenti dovrebbero essere sempre aggiornati per la sincronizzazione. Se userò volatile vuol dire che gli utenti non riceveranno il messaggio se hanno perso la connessione? Ci sarà la possibilità che successivamente ricevano l'ultimo messaggio? Qualunque altro svantaggio di usare volatile? – 3s2ng

+2

Vorrei usare 'socket.volatile.emit' quando i dati del messaggio corrente inviati sostituiscono i dati precedenti sul client (cioè rende obsoleto il precedente messaggio inviato tramite la stessa chiamata). –

18

Ho un gioco di carte multiplayer. Socket.io supera la mia CPU a circa 3000 utenti simultanei. Questo è sulla CPU Intel i7. Per questo motivo devo eseguire più processi node/socket.io per gestire il carico.

Per 100 connessioni simultanee si dovrebbe andare bene. Forse stai usando alcuni VPS e la CPU è condivisa con tutte le altre VM? Gestisci un server dedicato?

Inoltre, controllare il codice. Si potrebbe fare in modo sincrono alcune cose che dovrebbero diventare asincrone.

+0

Se si dovesse utilizzare il modulo cluster e utilizzato più core, tale numero aumenterebbe? O stai già utilizzando il modulo cluster? –

+8

Attualmente eseguo 7 processi di nodo usando HAProxy come frontend. Ci sono circa 9000 utenti concorrenti (~ 1300 per nodo) e tutto funziona senza problemi. Tutto su un singolo server. –

+0

Fantastico sapere, grazie per la risposta. –

Problemi correlati