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.