Configurar un servidor de Internet en Python usando Socket

Como complemento al tutorial del cliente de red, este tutorial muestra cómo implementar un servidor web simple en Pitón. Sin duda, esto no sustituye a Apache o Zope. También hay formas más sólidas de implementar servicios web en Python, utilizando módulos como BaseHTTPServer. Este servidor utiliza el módulo de socket exclusivamente.

Recordará que el módulo de socket es la columna vertebral de la mayoría de los módulos de servicios web de Python. Al igual que con el cliente de red simple, construir un servidor con él ilustra los conceptos básicos de los servicios web en Python de manera transparente. BaseHTTPServer mismo importa el módulo de socket para afectar a un servidor.

A modo de revisión, todas las transacciones de red ocurren entre clientes y servidores. En la mayoría de los protocolos, los clientes solicitan una determinada dirección y reciben datos.

Dentro de cada dirección, se pueden ejecutar una multitud de servidores. El límite está en el hardware. Con suficiente hardware (RAM, velocidad del procesador, etc.), la misma computadora puede servir como servidor web, servidor ftp y

instagram viewer
servidor de correo (pop, smtp, imap o todo lo anterior) todo al mismo tiempo. Cada servicio está asociado a un puerto. El puerto está vinculado a un zócalo. El servidor escucha su puerto asociado y proporciona información cuando se reciben solicitudes en ese puerto.

Entonces, para afectar una conexión de red, necesita conocer el host, el puerto y las acciones permitidas en ese puerto. La mayoría de los servidores web se ejecutan en el puerto 80. Sin embargo, para evitar conflictos con un servidor Apache instalado, nuestro servidor web se ejecutará en el puerto 8080. Para evitar conflictos con otros servicios, es mejor mantener los servicios HTTP en el puerto 80 u 8080. Estos son los dos más comunes. Obviamente, si se usan, debe encontrar un puerto abierto y alertar a los usuarios sobre el cambio.

Al igual que con el cliente de red, debe tener en cuenta que estas direcciones son los números de puerto comunes para los diferentes servicios. Mientras el cliente solicite el servicio correcto en el puerto correcto en la dirección correcta, la comunicación seguirá en curso. De Google El servicio de correo, por ejemplo, no se ejecutó inicialmente en los números de puerto comunes pero, como saben cómo acceder a sus cuentas, los usuarios aún pueden obtener su correo.

A diferencia del cliente de red, todas las variables en el servidor están cableadas. Cualquier servicio que se espera que se ejecute constantemente no debe tener las variables de su lógica interna establecida en la línea de comando. La única variación en esto sería si, por alguna razón, quisiera que el servicio se ejecute ocasionalmente y en varios números de puerto. Sin embargo, si este fuera el caso, aún podría ver la hora del sistema y cambiar los enlaces en consecuencia.

Como ya se mencionó, el servidor necesita conocer el host al que está asociado y el puerto en el que escuchar. Para nuestros propósitos, haremos que el servicio se aplique a cualquier nombre de host.

El puerto, como se mencionó anteriormente, será 8080. Tenga en cuenta que, si utiliza este servidor junto con el cliente de red, deberá cambiar el número de puerto utilizado en ese programa.

Ya sea para solicitar información o para servirla, para acceder al Internet, necesitamos crear un socket. La sintaxis para esta llamada es la siguiente:

Los dos primeros son obviamente protocolos de internet. Se puede acceder a todo lo que viaja por Internet en estas familias. Muchas redes aún no se ejecutan en IPv6. Por lo tanto, a menos que sepa lo contrario, es más seguro usar IPv4 y usar AF_INET.

Con mucho, los tipos más comunes son SOCK_STEAM y SOCK_DGRAM porque funcionan en los dos protocolos del conjunto de IP (TCP y UDP). Los últimos tres son mucho más raros y, por lo tanto, no siempre son compatibles.

Después de crear el zócalo, debemos configurar las opciones del zócalo. Para cualquier objeto de socket, puede establecer las opciones de socket utilizando el método setsockopt (). La sintaxis es la siguiente:

Si queremos dar retroalimentación a la persona que llama al servidor, ahora podríamos ingresar un comando de impresión para confirmar que el servidor está funcionando.

Habiendo configurado el servidor, ahora necesitamos decir Pitón qué hacer cuando se realiza una solicitud en el puerto dado. Para esto, hacemos referencia a la solicitud por su valor y la usamos como argumento de un bucle while persistente.

Cuando se realiza una solicitud, el servidor debe aceptar la solicitud y crear un objeto de archivo para interactuar con ella.

En este caso, el servidor usa el mismo puerto para leer y escribir. Por lo tanto, el método makefile recibe un argumento 'rw'. La longitud nula del tamaño del búfer simplemente deja que esa parte del archivo se determine dinámicamente.

A menos que queramos crear un servidor de acción única, el siguiente paso es leer la entrada del objeto de archivo. Cuando hacemos eso, debemos tener cuidado de quitar esa entrada del espacio en blanco en exceso.

La solicitud se presentará en forma de acción, seguida de una página, el protocolo y la versión del protocolo que se está utilizando. Si se quiere servir una página web, se divide esta entrada para recuperar la página solicitada y luego se lee esa página en una variable que luego se escribe en el objeto del archivo de socket. Se puede encontrar una función para leer un archivo en un diccionario en el blog.

Para que este tutorial sea un poco más ilustrativo de lo que se puede hacer con el módulo de socket, renunciaremos a esa parte del servidor y, en su lugar, mostraremos cómo se puede matizar la presentación de datos. Ingrese las siguientes líneas en el programa.

Si se está enviando una página web, la primera línea es una buena manera de introducir los datos en un navegador web. Si se omite, la mayoría de los navegadores web mostrarán HTML. Sin embargo, si uno lo incluye, el 'OK' debe ser seguido por dos Nuevos caracteres de línea. Estos se utilizan para distinguir la información del protocolo del contenido de la página.

La sintaxis de la primera línea, como probablemente pueda suponer, es el protocolo, la versión del protocolo, el número de mensaje y el estado. Si alguna vez ha visitado una página web que se ha movido, probablemente haya recibido un error 404. El mensaje 200 aquí es simplemente el mensaje afirmativo.

El resto de la salida es simplemente una página web dividida en varias líneas. Notará que el servidor se puede programar para usar datos de usuario en la salida. La línea final refleja la solicitud web tal como la recibió el servidor.

Finalmente, como los actos de cierre de la solicitud, necesitamos cerrar el objeto de archivo y el socket del servidor.

Ahora guarde este programa con un nombre reconocible. Después de llamarlo con 'python program_name.py', si programó un mensaje para confirmar que el servicio se está ejecutando, esto debería imprimirse en la pantalla. El terminal parecerá detenerse. Todo es como debería ser. Abra su navegador web y vaya a localhost: 8080. Entonces debería ver la salida de los comandos de escritura que le dimos. Tenga en cuenta que, por el bien del espacio, no implementé el manejo de errores en este programa. Sin embargo, cualquier programa lanzado en el 'salvaje' debería.

instagram story viewer