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<br />

Netzwerkprogrammierung in der Praxis<br />

In den ersten vier Kapiteln dieses Buchs haben wir uns das Rüstzeug für<br />

die <strong>Unix</strong>-Netzwerkprogrammierung angeeignet. Jetzt wollen wir uns um die<br />

Praxis der Netzwerkprogrammierung kümmern <strong>und</strong> dabei unsere Kenntnisse<br />

vertiefen. Zu diesem Zweck beschäftigen wir uns im folgenden vorwiegend <strong>mit</strong><br />

dem Entwurf <strong>und</strong> der Implementierung robuster Serverprogramme. Zwar sind<br />

auch Clientprogramme nicht frei von Komplexität, die Musik spielt im Bereich<br />

der Netzwerkprogrammierung aber meist auf der Seite der Server. Das Kapitel<br />

beschreibt fünf verschiedene Implementierungsmuster für Serverprogramme<br />

<strong>und</strong> wiegt deren Vor- <strong>und</strong> Nachteile gegeneinander ab.<br />

Das einzige bislang vorgestellte echte“ Serverprogramm, der Timeserver aus<br />

”<br />

Beispiel 4.6, war bewußt sehr einfach strukturiert. Nach dem Programmstart<br />

legt der Server einen neuen Socket an <strong>und</strong> öffnet diesen passiv. Auf neu eingehende<br />

Verbindungsanfragen reagiert der Server, indem er sequentiell jeweils<br />

eine Verbindung annimt <strong>und</strong> dem Clientprogramm, <strong>mit</strong> dem er nun verb<strong>und</strong>en<br />

ist, die aktuelle Uhrzeit über<strong>mit</strong>telt. Danach schließt der Server die Verbindung<br />

<strong>und</strong> wartet auf bzw. bedient die nächste Clientanfrage. In der Literatur<br />

wird ein derartiger Server oft als iterativer Server bezeichnet. Iterativ<br />

arbeitende Server haben den Nachteil, daß, während von ihnen eine Clientanfrage<br />

bearbeitet wird, andere Clients zunächst vom Dienst ausgeschlossen<br />

bleiben. Erst wenn eine Anfrage komplett abgearbeitet <strong>und</strong> die Verbindung<br />

terminiert ist, kommt der nächste Client zum Zug. Iterative Server werden<br />

deshalb meist dann eingesetzt, wenn der Server die einzelnen Anfragen der<br />

Clients sehr schnell <strong>und</strong> ohne größeren Aufwand beantworten kann <strong>und</strong> die<br />

Verbindung zum Client danach sofort wieder beendet wird. Dies ist z. B. beim<br />

Timeserver aus Beispiel 4.6 der Fall, weshalb dort die sequentielle Behandlung<br />

der Clients durchaus in Ordnung geht.<br />

Neben der iterativen Verarbeitung der Verbindungen gibt es aber auch die<br />

Möglichkeit, die eingehenden Anfragen nebenläufig zu beantworten. Nebenläufige<br />

Server bieten den anfragenden Clients in der Regel ein besseres, weil

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!