05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

5.3 Nebenläufige Server <strong>mit</strong> mehreren <strong>Threads</strong> 273<br />

Abb. 5.5. Wartezeiten nebenläufiger Anfragen bei threadbasierten Servern<br />

Für die Clients ergibt sich durch die nebenläufige Server-Architektur noch<br />

ein weiterer Vorteil: Wie Abb. 5.5 zeigt, sinkt die durchschnittliche Wartezeit<br />

eines Clients im direkten Vergleich zum iterativen Server deutlich. Die<br />

meisten Clients erhalten innerhalb der ersten fünf Clockticks nach Verbindungsaufbau<br />

bereits eine Antwort des Servers. Erst nachdem der Server durch<br />

die nebenläufige Bearbeitung der ersten Anfragen unter Last steht, verzögert<br />

sich die Antwortszeit für einige Nachzügler etwas. Trotzdem liegt die durchschnittliche<br />

Reaktionszeit des threadbasierten Servers um Längen unter der<br />

Antwortszeit der iterativen Variante. Durch dieses fairere Verhalten gegenüber<br />

allen <strong>mit</strong>einander konkurrierenden Client-Anfragen erscheint dem Client die<br />

Arbeit <strong>mit</strong> einem nebenläufigen Server deutlich flüssiger.<br />

Besonderheiten <strong>und</strong> Einsatzgebiete<br />

Anders als beim iterativen Server kann ein einziger bösartiger Client den<br />

vielfädigen Server nicht zum Stillstand bringen. Blockiert ein Client wie in<br />

Abschnitt 5.2.4 beschrieben eine TCP-Verbindung zum Server, so nimmt letzterer<br />

nach wie vor neue Anfragen an. Der Server startet dazu einfach neue<br />

<strong>Threads</strong>. Allerdings empfiehlt es sich auch im Fall nebenläufiger Server, eine<br />

geeignete obere Zeitschranke für die Dauer einer Client-Verbindung vorzugeben.<br />

Andernfalls könnten böswillige Clients zumindest einige Ressourcen auf<br />

dem Server-System dauerhaft blockieren. Der Timeout-Wert wird wie üblich<br />

über select() oder die Socket-Optionen SO_RCVTIMEO <strong>und</strong> SO_SNDTIMEO in<br />

das Programm eingebracht. Darüber hinaus besitzt der nebenläufige Server<br />

die Möglichkeit, die maximale Laufzeit eines <strong>Threads</strong> zu überwachen <strong>und</strong> da<strong>mit</strong><br />

ebnenfalls einen Timeout für die Verbindung zum Client einzuführen.<br />

Nachdem vom Server für jede Client-Anfrage ein neuer Thread gestartet wird<br />

<strong>und</strong> dabei keine Begrenzung in Bezug auf die Anzahl gleichzeitiger Client-<br />

Verbindungen stattfindet, sind dem Ressourcenverbrauch des Servers keine

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!