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.

266 5 Netzwerkprogrammierung in der Praxis<br />

Netzwerkverbindungen arbeiten. Geeignete Timeout-Werte können entweder<br />

unter Zuhilfenahme der select()-Funktion oder <strong>mit</strong> den Socket-Optionen<br />

SO_RCVTIMEO <strong>und</strong> SO_SNDTIMEO in das Programm eingebracht werden.<br />

Aufgr<strong>und</strong> ihrer einfachen Programmstruktur sind iterative Server ausgezeichnet<br />

dazu geeignet, kurze, schnell zu erledigende Aufgaben zu bearbeiten. Die<br />

sequentielle Struktur bewirkt zugleich eine strikte Li<strong>mit</strong>ierung des Ressourcenverbrauchs,<br />

was die Anzahl nebenläufiger Aktivitäten auf der Serverseite<br />

betrifft. Unabhängig von der Anzahl der Clients bleibt die Anzahl der Prozesse<br />

<strong>und</strong> da<strong>mit</strong> der Speicher- <strong>und</strong> CPU-Verbrauch kontrollierbar.<br />

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

Als ersten nebenläufigen Server entwickeln wir im folgenden einen threadbasierten<br />

Server, der die Clientverbindungen <strong>mit</strong> Hilfe von POSIX-<strong>Threads</strong> nebenläufig<br />

behandelt. Durch die nebenläufige Verarbeitung der Anfragen werden<br />

die Ressourcen des Server-Systems besser ausgeschöpft <strong>und</strong> ganz nebenbei<br />

verbessert sich das Anwortsverhalten gegenüber den Clients. Die auffälligsten<br />

Unterschiede zum iterativen Server aus Beispiel 5.9 bestehen in der abgewandelten<br />

Signalbehandlung sowie natürlich der veränderten Verarbeitung der<br />

eingehenden Verbindungen. Anstatt die einzelnen Clients sequentiell zu bedienen,<br />

kümmert sich der Server in separaten, jeweils neu gestarteten <strong>Threads</strong><br />

um seine K<strong>und</strong>schaft.<br />

accept(s)<br />

Hauptthread<br />

Serverprozeß<br />

pthread_detach()<br />

pthread_create()<br />

Arbeiter<br />

Thread<br />

read(c)/write(c)<br />

read(c)/write(c)<br />

close(c)<br />

Arbeiter<br />

Thread<br />

close(c)<br />

Abb. 5.4. Ablaufdiagramm eines nebenläufigen Servers <strong>mit</strong> <strong>Threads</strong><br />

Abbildung 5.4 zeigt die prinzipielle Vorgehensweise eines threadbasierten, nebenläufigen<br />

Servers: Nachdem <strong>mit</strong> accept() eine neue Netzwerkverbindung

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!