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

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

236 5 Netzwerkprogrammierung in der Praxis<br />

faireres Antwortsverhalten <strong>und</strong> sind darüber hinaus in der Lage, die Ressourcen<br />

des Serversystem (etwa mehrere Prozessoren) besser auszuschöpfen.<br />

Die einfachste Art, einen nebenläufig arbeitenden Server aufzusetzen, bietet<br />

der bereits vorgestellte Internet Dæmon inetd. Kommtderinetd zum<br />

Einsatz, so wartet dieser auf eingehende TCP- oder UDP-Verbindungen <strong>und</strong><br />

startet bei Bedarf ein zuvor für diese Verbindungen festgelegtes Serverprogramm.<br />

Das Serverprogramm muß sich dann nicht mehr um die Handhabung<br />

der Netzwerkverbindung kümmern, sondern kann sich ausschließlich auf die<br />

inhaltlichen Aspekte der Anfrage konzentrieren. Die Arbeit <strong>mit</strong> dem Internet<br />

Dæmon haben wir bereits in Abschnitt 4.1.2 kennengelernt <strong>und</strong> <strong>mit</strong> Hilfe von<br />

Beispiel 4.1 getestet. Zu den Nachteilen des Internet Dæmons zählt das starre<br />

<strong>und</strong> aus Systemsicht gleichzeitig recht aufwendige fork()-/exec()-Verfahren:<br />

Für jede eingehende Netzwerkverbindung erzeugt der inetd zuerst via fork()<br />

einen neuen Kindprozeß <strong>und</strong> überlagert diesen dann <strong>mit</strong>tels exec() <strong>mit</strong> einem<br />

neuen Programm.<br />

Wir wollen uns deshalb im weiteren Verlauf dieses Kapitels nicht mehr auf die<br />

Dienste des inetd verlassen, sondern <strong>mit</strong> der Entwicklung echter“ nebenläufiger<br />

Server beginnen. Wir werden dabei auf zwei gr<strong>und</strong>sätzlich verschiedene<br />

”<br />

Techniken zurückgreifen: Nebenläufigkeit durch mehrere Prozesse <strong>und</strong> Nebenläufigkeit<br />

durch mehrere <strong>Threads</strong>. Beiden Ansätzen ist gemein, daß sich<br />

jeweils eine Serverinstanz um jeweils einen Client kümmert. Im ersten Fall ist<br />

diese Serverinstanz ein Prozeß, im zweiten Fall ein Thread. 1<br />

Schließlich unterscheidet man die nebenläufigen Server noch dahingehend, ob<br />

die Serverinstanzen für jeden Client erst zum Zeitpunkt des Verbindungsaufbaus<br />

neu gebildet werden, oder ob die Instanzen bereits vorab, gewissermaßen<br />

auf Vorrat erzeugt werden. Die Techniken, bei denen bereits im Vorfeld eine gewisse<br />

Anzahl Prozesse oder <strong>Threads</strong> gestartet werden, nennt man Preforking<br />

bzw. Prethreading. Auch Server <strong>mit</strong> Preforking- oder Prethreading-Technik<br />

werden wir in diesem Kapitel noch kennenlernen.<br />

5.1 Aufbau der Testumgebung<br />

Unser Testszenario soll ein typisches Client-/Server-Umfeld simulieren: Ein<br />

Server bietet eine Dienstleistung an, die von einer Menge von Clients mehr<br />

oder weniger gleichzeitig abgerufen wird. Abhängig von der Anfrage des Clients<br />

kann die Aufgabe für den Server unterschiedlich anspruchsvoll sein: Die<br />

angefragte Leistung benötigt viel oder wenig Rechenzeit zur Berechnung <strong>und</strong><br />

es werden unterschiedlich viele Daten als Ergebnis an den Client übertragen.<br />

Aus diesen Überlegungen heraus legen wir den im folgenden Abschnitt beschriebenen<br />

Funktionsumfang für unsere Client-/Server-Umgebung fest.<br />

1 Darüber hinaus gibt es natürlich auch noch die Möglichkeit, die beiden Techniken<br />

<strong>mit</strong>einander zu kombinieren um da<strong>mit</strong> verschiedene hybride Prozeß-/Thread-<br />

Modelle zu entwerfen.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!