Anhang A. Weitere HTTP-Server-Beispiele

Dieser Anhang erweitert den Inhalt von "Beating the C10k Problem" um weitere Beispiele für HTTP-Server. Diese Beispiele sind für das Verständnis von Kapitel 5 nicht unbedingt notwendig, aber vielleicht interessant. Einige dieser Beispiele sind auch in den Benchmarks enthalten.

fork()-Prozedur in der Sprache C

Wir werden versuchen, einen nebenläufigen HTTP-Server mit C zu implementieren. Wenn du mit C vertraut bist, wirst du das folgende Programm ziemlich einfach finden. Andernfalls musst du nicht alle Details verstehen, sondern nur die Grundidee. Der Aufruf von fork() erstellt eine Kopie des aktuellen Prozesses, so dass plötzlich zwei Prozesse im Betriebssystem erscheinen: der ursprüngliche (Parent) und ein Child. Dieser zweite Prozess hat genau die gleichen Variablen und den gleichen Status, der einzige Unterschied ist der Ergebniswert von fork():

#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <unistd.h>
#include <stdio.h>

int main(int argc, char *argv[]) {
  signal(SIGCHLD, SIG_IGN);
  struct sockaddr_in serv_addr;
  bzero((char *) &serv_addr, sizeof(serv_addr));
  serv_addr.sin_family = AF_INET;
  serv_addr.sin_addr.s_addr = INADDR_ANY;
  serv_addr.sin_port = htons(8080);
  int server_socket = socket(AF_INET, SOCK_STREAM, 0);
  if(server_socket < 0) {
    perror("socket");
    exit(1);
  }
  if(bind(server_socket,
        (struct sockaddr *) &serv_addr,
        sizeof(serv_addr)) < 0) {
    perror("bind");
    exit(1);
  }
  listen(server_socket ...

Get Reaktive Programmierung mit RxJava now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.