L'applicazione che abbiamo in mente è un server relay. L'obiettivo è quello di accettare un numero elevato di connessioni socket in entrata (almeno migliaia) che rimarranno aperte per lunghi periodi (ore o forse giorni). Si scambieranno modeste quantità di dati e avranno bisogno di una latenza ragionevolmente bassa.
Il design tecnico è semplice e abbiamo un'implementazione di test. La nostra preferenza è usare Windows hosting e .NET, perché questa è la tecnologia che conosciamo. Tuttavia, questo tipo di utilizzo è ben al di fuori di ciò che ci è familiare.
La domanda è se ci sono limiti o vincoli specifici da tenere presente che sono inerenti o comuni al software che fa questo, e che dovremmo permettere nel nostro progetto e / o test prima di un lancio.
Ho trovato questa domanda ( Gestione di grandi quantità di socket ) e questo link ( link ), che tendono a suggerire che la nostra soluzione dovrebbe funzionare.
-
I commentatori hanno suggerito di aprire e chiudere le porte, o di usare un qualche tipo di protocollo, senza suggerire come. Il problema è che in qualsiasi momento un messaggio può essere inoltrato a una singola destinazione nota con l'aspettativa di essere ricevuto rapidamente (diciamo al massimo un secondo, preferibilmente prima). La destinazione è (in generale) dietro un firewall con proprietà sconosciute, quindi non può (in generale) eseguire un server o accettare connessioni in entrata. Può solo effettuare connessioni in uscita. Riteniamo che sia necessaria una connessione in uscita permanente per poter ricevere i pacchetti in qualsiasi momento senza preavviso. Suggerimenti alternativi potrebbero essere di interesse, anche se strettamente fuori tema per questa domanda.
Altri commentatori hanno suggerito che ci sono dei limiti del sistema operativo, ma non specificati. Supponendo che questa sia una versione del server Windows e qualche (forse grande) quantità di memoria, i limiti potrebbero essere un problema? Che cosa saranno? Windows è una cattiva idea?