[Diseño del sistema] Use Python para crear un servidor web por diversión (1)

Si desea ser un desarrollador excelente, debe tener un conocimiento profundo de la estructura interna de los sistemas de software que utiliza a diario, incluidos los lenguajes de programación, las bases de datos y los sistemas operativos, los servidores web y los marcos web. Además, para comprender estos sistemas mejor y más profundamente, debe comenzar desde cero y reconstruir este sistema ladrillo por ladrillo.

En las tres series de artículos de Ruslan, enséñanos a crear un servidor web simple desde cero para ayudar a todos a comprender mejor el servidor web. Este artículo es principalmente una traducción de los tres artículos de Ruslan y algo de mi propio entendimiento. Espero que pueda ser útil para todos. Para una mejor comprensión de este artículo, puede consultar Mr. Protocol Forest Series. ¿Le gustaría hacer un pedido? (Descripción general del protocolo HTTP) (por favor, púlseme)

Qué es un servidor Web

Para construir su propio servidor web, primero debe saber qué es un servidor web. El siguiente es un servidor web típico, creo que todo el mundo lo ha usado en la vida:
[Diseño del sistema] Use Python para crear un servidor web por diversión (1)
En resumen, un servidor web es un servidor web en ejecución (es decir, una pieza de software), esperando que los clientes le envíen solicitudes. Cuando recibe la solicitud, genera una respuesta y la envía de vuelta al cliente. El cliente y el servidor se comunican entre sí a través del protocolo HTTP. El cliente puede ser su navegador o cualquier otro software que utilice el protocolo HTTP, de hecho, cuando lee este artículo oficial de la cuenta, está utilizando el servicio proporcionado por el servidor web.

Una implementación de servidor web simple

Los servidores web comerciales son muy complicados, es común tener cientos de miles de líneas de código, pero también puede ser muy simple, tan simple como unas pocas docenas de líneas de código. Lo crea o no, mire la primera versión del código del servidor web del Sr. Ruslan. Este ejemplo está escrito en Python. Incluso si no has oído hablar de Python (es un lenguaje muy fácil, ¡ve y pruébalo!), Deberías poder entender el concepto a partir del código y los comentarios:

import socket
HOST, PORT = '', 8888
listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listen_socket.bind((HOST, PORT))
listen_socket.listen(1)
print 'Serving HTTP on port %s ...' % PORT
while True:
    client_connection, client_address = listen_socket.accept()
    request = client_connection.recv(1024)    
    print request

    http_response = """\
HTTP/1.1 200 OK

Hello, World!"""
    client_connection.sendall(http_response)
    client_connection.close()

Guarde el código anterior como webserver1.py y luego ejecute este programa en la línea de comandos. Me gusta esto:

$ python webserver1.py
Serving HTTP on port 8888 ...

Ahora, ingrese la URL: http: // localhost: 8888 / hello en la barra de direcciones de su navegador web , presione enter y luego sea testigo del milagro. Debería ver "¡Hola, mundo!" En su navegador, como la imagen a continuación:
[Diseño del sistema] Use Python para crear un servidor web por diversión (1)

Flujo de trabajo del servidor web
Ahora analicemos cómo funciona realmente. Primero comenzamos con la dirección web que acaba de ingresar. Se llama URL, y esta es su estructura básica:
[Diseño del sistema] Use Python para crear un servidor web por diversión (1)
URL es la dirección de un servidor web, el navegador utiliza esta dirección para encontrar y conectarse al servidor web y devolverle el contenido anterior. Antes de que su navegador pueda enviar solicitudes HTTP, debe establecer una conexión TCP con el servidor web. Luego envía una solicitud HTTP en la conexión TCP y espera a que el servidor devuelva una respuesta HTTP. Cuando su navegador reciba la respuesta, mostrará su contenido. En el ejemplo anterior, muestra "¡Hola, mundo!".

Exploremos más a fondo el proceso de establecer una conexión TCP entre el cliente y el servidor antes de enviar la solicitud HTTP. Para establecer el enlace, utilizan socket (socket). No usamos directamente el navegador para enviar la solicitud, pero usamos telnet en la línea de comando para simular artificialmente este proceso.

En su computadora que ejecuta el servidor web, establezca una sesión de telnet en la línea de comando, especifique un nombre de dominio local, use el puerto 8888 y presione Entrar:

$ telnet localhost 8888
Trying 127.0.0.1 ...
Connected to localhost.

En este momento, ha establecido una conexión TCP con el servidor que se ejecuta en su host local. En la siguiente figura, puede ver el proceso básico de un servidor desde el principio hasta poder establecer una conexión TCP.
[Diseño del sistema] Use Python para crear un servidor web por diversión (1)
En la misma sesión de telnet, ingrese GET / hello HTTP / 1.1, y luego ingrese:

$ telnet localhost 8888
Trying 127.0.0.1 ...Connected to localhost.
GET /hello HTTP/1.1

HTTP/1.1 200 OK
Hello, World!

¡Simplemente simuló manualmente su navegador (trabajo)! Envió una solicitud HTTP y recibió una respuesta HTTP. La siguiente es la estructura básica de una solicitud HTTP:
[Diseño del sistema] Use Python para crear un servidor web por diversión (1)
La primera línea de la solicitud HTTP consta de tres partes: el método HTTP (GET, porque queremos que nuestro servidor devuelva algún contenido) y la ruta / hola que indica la página requerida y el protocolo. versión.

Para simplificar, el servidor web que acabamos de construir ignora por completo el contenido de la solicitud anterior. También puede intentar ingresar algún contenido inútil en lugar de "GET / hello HTTP / 1.1", pero aún recibirá una respuesta de "¡Hola, mundo!".

Una vez que ingrese a la línea de solicitud y presione enter, el cliente enviará la solicitud al servidor; el servidor leerá la línea de solicitud y devolverá la respuesta HTTP correspondiente.

El siguiente es el contenido de la respuesta devuelto por el servidor al cliente (telnet en el ejemplo anterior):
[Diseño del sistema] Use Python para crear un servidor web por diversión (1)
Esta respuesta consta de tres partes: una línea de estado HTTP / 1.1 200 OK, seguida de una línea en blanco, y el cuerpo de la respuesta a continuación.

La línea de estado de respuesta HTTP HTTP / 1.1 200 OK contiene el número de versión HTTP, el código de estado HTTP 200 y la frase de estado HTTP "OK". Cuando el navegador recibe la respuesta, mostrará el cuerpo de la respuesta, por lo que verá "¡Hola, mundo!" En el navegador.

El anterior es el modelo de trabajo básico del servidor web. Para resumir: el servidor web crea un socket en el estado de escucha y recibe nuevas conexiones en un bucle. Una vez que el cliente establece una conexión TCP exitosa, enviará una solicitud HTTP al servidor, y luego el servidor responderá con una respuesta HTTP, y el cliente mostrará el contenido de la respuesta HTTP al usuario. Para establecer una conexión TCP, tanto el cliente como el servidor utilizan sockets.

Ahora que comprende el funcionamiento básico de un servidor web, puede experimentar con un navegador u otro cliente HTTP. Si lo ha intentado y lo ha observado, debería poder utilizar telnet para escribir solicitudes HTTP manualmente y convertirse en un cliente HTTP "humanoide".

Ahora hay una pequeña pregunta: "¿Cómo se adaptan las aplicaciones Django, Flask o Pyramid en el servidor web que acaba de configurar sin realizar ningún cambio en el programa?". Vendrá en la segunda parte de esta serie. Explicar con detalle.

Lectura recomendada:

Elaborar | historia Directorio de artículos secos
[bienestar] reunir sus propios cursos boutique en línea compartir videos (en)
[arquitectura] un viaje de evolución de la arquitectura de un sitio grande (en)
[arquitectura] un historial de evolución de la arquitectura de un sitio grande (en)
[Notas de C ++] C ++ El diseño de la memoria del modelo de objetos (2)
[Notas de C ++] El diseño de la memoria del modelo de objetos de C ++ (1)

Céntrese en compartir resumen de conocimientos de pila de tecnología de fondo del servidor

Bienvenido a prestar atención a la comunicación y al progreso común.

[Diseño del sistema] Use Python para crear un servidor web por diversión (1)

Codificación

¡El productor de códigos tiene la manera correcta de proporcionarle artículos técnicos fáciles de entender para facilitar la tecnología!

Supongo que te gusta

Origin blog.51cto.com/15006953/2552093
Recomendado
Clasificación