Apéndice A. Más ejemplos de servidores HTTP

Este apéndice amplía el contenido de "Vencer el problema C10k" proporcionando más ejemplos de servidores HTTP. Estos ejemplos no son imprescindibles para comprender el Capítulo 5, pero puede que te resulten interesantes. Además, algunos de estos ejemplos se incluyen en los puntos de referencia.

Procedimiento fork() en lenguaje C

Intentaremos implementar un servidor HTTP concurrente utilizando C. Si estás familiarizado con C, el siguiente programa te resultará bastante sencillo. De lo contrario, no te preocupes, no estás obligado a entender todos los detalles, sólo la idea general. Al invocar fork() se hace una copia del proceso actual, de modo que de repente aparecen dos procesos en el sistema operativo: el original (padre) y un hijo. Este segundo proceso tiene exactamente las mismas variables y el mismo estado, la única diferencia es el valor del resultado de 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 ...

Get Programación Reactiva con 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.