Sto scrivendo la rete sul lato server di un gioco multiplayer. Il gioco è un gioco di ruolo e ha la capacità massima assoluta di 2000 giocatori, ma praticamente raggiungerà un massimo di circa 300 giocatori, anche se potrebbe essere più alto o più basso. Per il tempo più lungo, ogni volta che dovevo fare networking dove coinvolgeva molti clienti, mi sono attenuto a NIO perché non richiedeva l'uso di centinaia di thread. Recentemente, mi sono imbattuto in una presentazione di PowerPoint in cui descriveva i due modelli in dettaglio, e ha quasi fatto sembrare il modello thread-per-client superiore a NIO. Ho anche trovato dei posti in cui afferma che il vecchio IO può effettivamente superare anche NIO.Vecchi thread I/O per modello client o pattern reattore NIO?
Il PowerPoint può essere trovato qui (è un po 'vecchio): http://www.mailinator.com/tymaPaulMultithreaded.pdf.
Non ho ancora scritto alcun contenuto, quindi non sarebbe un problema per me iniziare all'inizio se dovessi cambiare il mio intero design di rete. Non sono sotto pressione per tempo. Inizialmente, stavo progettando un'implementazione del modello di reattore con NIO (selezionare un evento, inviare un gestore per gestire l'evento).
Ulteriori informazioni possono essere trovate qui: http://en.wikipedia.org/wiki/Reactor_pattern
mio intero attuazione reattore è progettato per utilizzare un singolo filo. Da quando ho letto che il vecchio IO può sovraperformare, in realtà mi ha messo in un dilemma. Non voglio progettare un complicato sistema NIO che utilizza più thread solo per sfruttare appieno tutta la potenza della CPU, ma mi viene anche l'idea che una singola applicazione usi 300+ thread. Qual è il design giusto per il mio scopo? Il vantaggio del thread per client è che utilizza veramente tutta la potenza della CPU per natura, ma allo stesso tempo impantanare il sistema. Per non parlare, la dimensione dello stack di un singolo thread occupa molta memoria (quando moltiplicata di un paio di centinaia di volte). Dovrei attenermi al modello del reattore?
So che questa domanda è un po 'ambigua, ma sento che ho bisogno di fare una domanda specifica per la mia situazione, perché non sono riuscito a trovare una domanda su questo sito né un sito web in cui risolva un problema del mio tipo. Ce n'era una su un gioco, ma il gioco era pensato per gestire decine di migliaia di giocatori.
Grazie mille! Se hai bisogno di chiarimenti, chiedi!
Mi dispiace @Martin. Intendevo semplificarlo con il modello thread-per-client. – Gray
Quindi pensi che i 300 fili in cima al "500" siano "trascurabili"? –
Non intendo avere una discussione, ma cosa succede se scrivo costantemente dati a un client remoto e leggo da quel client? –