Quale tecnologia .NET funzionerà come miglioramento per questa applicazione client / server?

1

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:

  1. Utilizzare thread asincroni con un pool di thread di 8 o più thread (sarà in grado di gestire 8.000 utenti?) o

  2. 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.

    
posta Mohammed Hossain 08.04.2013 - 16:32
fonte

1 risposta

2

Puoi tranquillamente scendere lungo il percorso WCF.

Tuttavia, sarebbe semplicemente un passaggio laterale a meno che non decidessi di adottare socket asincroni.

Asincrono è la soluzione per un'elevata scalabilità

In sostanza dovresti cambiare il tuo codice di rete esistente in modo asincrono (se non lo è già).

Rimuovi qualsiasi blocco nel tuo codice di rete, accetta più connessioni e amp; messaggi e spinge l'analisi dei tuoi messaggi in una coda. Limita il numero di thread che elaborano i messaggi in qualsiasi momento per impedire al server di trasformare la tua CPU.

WCF ha incorporato il supporto per l'Asynchronous Networking.

Tuttavia, non è necessario che WCF esegua la rete asincrona

Le prese C # asincrone potrebbero essere un refactore più semplice e potrebbero essere più adatte per il progetto specifico piuttosto che il refactoring dell'intero progetto e degli endpoint per utilizzare WCF.

WCF racchiude semplicemente i socket asincroni per te e ti ritroverai con gli stessi problemi nel codice che avevi se avessi interrotto la rotta Asynchronous Sockets.

Quindi WCF non sarà un punto d'argento per la tua applicazione. Avrai bisogno di fare di più per identificare i colli di bottiglia e forse anche dividere i tuoi server per spingere l'elaborazione in una soluzione più scalabile orizzontalmente.

vale a dire. Più server in una soluzione round robin (o equivalente) per attività intensive della CPU.

    
risposta data 09.04.2013 - 01:59
fonte

Leggi altre domande sui tag