Sto aiutando un amico con la sua riscrittura della sua applicazione .NET, attualmente usando WinForms + socket, che è un programma client / server che attualmente ha in media ~ 120 utenti simultanei (inviando messaggi, usando la chat). Il cliente crescerà e alla fine dovrà essere in grado di gestire diverse migliaia di utenti simultanei.
Viene creato un thread per utente, ma questo non è scalabile a causa di limitazioni hardware (il server si è rotto durante lo stress test di più utenti), per non menzionare la ricerca che ho fatto sull'argomento indica che si tratta di una cattiva pratica.
A proposito di ricerca, ho raccolto le seguenti possibilità per questa riscrittura:
-
Utilizzare thread asincroni con un pool di thread di 8 o più thread (sarà in grado di gestire 8.000 utenti?) o
-
Uso di WCF (questo sembra l'approccio più .NET e più intuitivo con i suoi callback invece di usare i loop)
Sono più inclinato verso WCF in questo momento. Prima che qualcuno mi chieda, ho menzionato come potrebbe essere un'applicazione web, ma lui ha risposto di no.
Modifica (risposte alle domande):
I thread attualmente letti dal socket (il pacchetto) e analizzati (semplice analisi delle stringhe) e in base al tipo di payload, esegue un'altra funzione. Le funzioni eseguite non richiedono molte risorse.