Welches Betriebssystem?
Wenn Sie auf Windows-Computern einen Server schreiben, der gut skaliert werden kann und daher E / A-Abschlussports und asynchrone E / A verwendet, besteht die Hauptbeschränkung in der Menge des nicht ausgelagerten Pools, den Sie für jede aktive Verbindung verwenden . Dies führt direkt zu einer Begrenzung, die auf der von Ihrem Computer installierten Speichermenge basiert (nicht ausgelagerter Pool ist eine endliche Menge mit fester Größe, die auf dem installierten Gesamtspeicher basiert).
Für Verbindungen, die nicht viel Verkehr sehen, können Sie sie effizienter gestalten, indem Sie "Null-Byte-Lesevorgänge" veröffentlichen, die keinen nicht ausgelagerten Pool verwenden und das Limit für gesperrte Seiten nicht beeinflussen (eine weitere potenziell begrenzte Ressource, die Sie möglicherweise verhindert viele Steckdosen offen haben).
Abgesehen davon müssen Sie ein Profil erstellen, aber ich habe es geschafft, mehr als 70.000 gleichzeitige Verbindungen auf einem bescheiden spezifizierten Server (760 MB Speicher) herzustellen. Weitere Informationen finden Sie hier http://www.lenholgate.com/blog/2005/11/windows-tcpip-server-performance.html .
Wenn Sie eine weniger effiziente Architektur wie "Thread pro Verbindung" oder "Auswahl" verwenden, sollten Sie natürlich weniger beeindruckende Zahlen erwarten. Aber meiner Meinung nach gibt es einfach keinen Grund, solche Architekturen für Windows-Socket-Server auszuwählen.
Edit: siehe hierhttp://blogs.technet.com/markrussinovich/archive/2009/03/26/3211216.aspx ; Die Art und Weise, wie die Menge des nicht ausgelagerten Pools berechnet wird, hat sich in Vista und Server 2008 geändert, und es ist jetzt viel mehr verfügbar.