Welche Best Practices oder Techniken werden beim Schreiben eines benutzerdefinierten Servers verwendet, um die maximale Anzahl von Benutzern zu bestimmen, die sich jederzeit mit dem Server verbinden können?
Ich würde annehmen, dass die Fähigkeiten der Computerhardware, der Netzwerkkapazität und des Serverprotokolls alle wichtige Faktoren wären.
Glauben Sie auch, dass es eine gute Methode ist, die Anzahl der Netzwerkverbindungen auf eine bestimmte maximale Anzahl von Benutzern zu beschränken? Oder sollte der Server die Anzahl der Netzwerkverbindungen nicht einschränken und die Leistung beeinträchtigen, bis die Antwortzeit extrem hoch ist?
Im Allgemeinen können moderne Server sehr viele gleichzeitige Verbindungen verarbeiten. Ich habe an Systemen mit über 8.000 gleichzeitig geöffneten TCP / IP Sockets gearbeitet.
Sie benötigen eine qualitativ hochwertige Serviceschnittstelle, um diese Art von Belastung zu bewältigen. Schauen Sie sich libevent oder libev .
Das ist eine gute Frage und es ist definitiv situativ. Was ist dein Computer? Verfügen Sie über einen 4-Sockel-Computer mit Quad-Core-Xeons, 128 GB RAM und Fibre-Channel-Konnektivität (wie die beiden Dell R900, die wir gerade gekauft haben)? Oder laufen Sie auf einem p3 550 mit 256 MB RAM und 56K Modem? Wie viel Last wird jede Verbindung auf Ihrem Server gespeichert? Welche Art von Antwort ist akzeptabel?
Dies sind die Fragen, die Sie beantworten müssen. Ich denke, der beste Weg, die Antwort zu finden, ist durch Belastungstests. Erstellen Sie einen Komponententest der erwarteten (und möglicherweise unerwarteten) Pfade, die der Code für Ihren Server ausführt. Suchen Sie nach einem Lasttest-Framework, mit dem Sie 10, 100, 1000, 10000 Benutzer simulieren können, die diese Aufgaben gleichzeitig ausführen.
Damit erfahren Sie, wie viele Verbindungen Ihr Computer unterstützen kann.
Das Tolle am Last- / Komponententest-Szenario ist, dass Sie in Ihren Komponententests die Reaktionszeiten berücksichtigen und die Last erhöhen können, bis Sie außerhalb Ihrer Reaktionszeit sind. Wenn Sie eine X-Anzahl von Benutzern mit Y-Sekunden-Antwort unterstützen müssen, können Sie dies mit Ihren Auslastungstests demonstrieren.
Einer der größten Rückschläge bei Verbindungen mit hohem Parallelitätsgrad sind die beteiligten Router. Heimnutzerorientierte Router haben normalerweise eine kleine NAT-Tabelle, die verhindert, dass der Router die Verbindungen des Servers tatsächlich bedient.
Stellen Sie sicher, dass Sie Ihre Router- / Netzwerkinfrastruktur genauso gut untersuchen.
Ich denke, dass Sie die Anzahl der Verbindungen, die Ihr Server erlaubt, nicht einschränken sollten - fangen Sie einfach alle Exceptions ein, die beim Annehmen und Schließen von Verbindungen auftreten können, und Sie sollten in Ordnung sein. Sie sollten diese Art der Programmierung auf niedrigeren Ebenen den zugrunde liegenden Betriebssystemebenen überlassen - auf diese Weise können Sie Ihren Server einfacher portieren usw.
Das hängt wirklich von Ihrem Betriebssystem ab.
Verschiedene Unix-Varianten unterstützen "unbegrenzte" Anzahl von Datei-Handles / Sockets, andere haben hohe Werte wie 32768.
Ein typisches Benutzerlimit ist 8192, aber es kann normalerweise höher eingestellt werden.
Ich denke, Windows ist begrenzender, aber die Server-Version kann höhere Grenzen haben.
Tags und Links networking network-programming