Servidor Http incorporado y motor interno

CherryPy viene con su propio servidor web (HTTP). Es por eso que CherryPy es autónomo y permite a los usuarios ejecutar una aplicación CherryPy a los pocos minutos de obtener la biblioteca.

los web server actúa como puerta de entrada a la aplicación con la ayuda de la cual todas las solicitudes y respuestas se mantienen al día.

Para iniciar el servidor web, un usuario debe realizar la siguiente llamada:

cherryPy.server.quickstart()

los internal engine of CherryPy es responsable de las siguientes actividades:

  • Creación y gestión de objetos de solicitud y respuesta.
  • Controlar y gestionar el proceso CherryPy.

CherryPy - Configuración

El marco viene con su propio sistema de configuración que le permite parametrizar el servidor HTTP. Los ajustes para la configuración se pueden almacenar en un archivo de texto con una sintaxis cercana al formato INI o como un diccionario Python completo.

Para configurar la instancia del servidor CherryPy, el desarrollador debe usar la sección global de la configuración.

global_conf = {
   'global': {
      'server.socket_host': 'localhost',
      'server.socket_port': 8080,
   },
}

application_conf = {
   '/style.css': {
      'tools.staticfile.on': True,
      'tools.staticfile.filename': os.path.join(_curdir, 'style.css'),
   }
}

This could be represented in a file like this:
[global]
server.socket_host = "localhost"
server.socket_port = 8080
[/style.css]
tools.staticfile.on = True
tools.staticfile.filename = "/full/path/to.style.css"

Cumplimiento HTTP

CherryPy ha ido evolucionando lentamente pero incluye la compilación de especificaciones HTTP con el soporte de HTTP / 1.0 y luego la transferencia con el soporte de HTTP / 1.1.

Se dice que CherryPy cumple condicionalmente con HTTP / 1.1, ya que implementa todos los niveles obligatorios y obligatorios, pero no todos los niveles obligatorios de la especificación. Por lo tanto, CherryPy admite las siguientes características de HTTP / 1.1:

  • Si un cliente afirma admitir HTTP / 1.1, debe enviar un campo de encabezado en cualquier solicitud realizada con la versión de protocolo especificada. Si no se hace, CherryPy detendrá inmediatamente el procesamiento de la solicitud.

  • CherryPy genera un campo de encabezado de fecha que se utiliza en todas las configuraciones.

  • CherryPy puede manejar el código de estado de respuesta (100) con el apoyo de los clientes.

  • El servidor HTTP integrado de CherryPy admite conexiones persistentes que son las predeterminadas en HTTP / 1.1, mediante el uso del encabezado Connection: Keep-Alive.

  • CherryPy maneja solicitudes y respuestas correctamente fragmentadas.

  • CherryPy admite solicitudes de dos maneras distintas: los encabezados If-Modified-Since y If-Unmodified-Since y envía respuestas según las solicitudes en consecuencia.

  • CherryPy permite cualquier método HTTP.

  • CherryPy maneja las combinaciones de versiones HTTP entre el cliente y la configuración establecida para el servidor.

Servidor de aplicaciones multiproceso

CherryPy está diseñado en base al concepto de subprocesos múltiples. Cada vez que un desarrollador obtiene o establece un valor en el espacio de nombres CherryPy, se hace en el entorno de subprocesos múltiples.

Tanto cherrypy.request como cherrypy.response son contenedores de datos de subprocesos, lo que implica que su aplicación los llama de forma independiente al saber qué solicitud se envía a través de ellos en tiempo de ejecución.

Los servidores de aplicaciones que utilizan el patrón de subprocesos no son muy apreciados porque se considera que el uso de subprocesos aumenta la probabilidad de problemas debido a los requisitos de sincronización.

Las otras alternativas incluyen:

Patrón multiproceso

Cada solicitud es manejada por su propio proceso de Python. Aquí, el rendimiento y la estabilidad del servidor pueden considerarse mejores.

Patrón asincrónico

Aquí, aceptar nuevas conexiones y enviar los datos al cliente se realiza de forma asincrónica desde el proceso de solicitud. Esta técnica es conocida por su eficacia.

Envío de URL

La comunidad CherryPy quiere ser más flexible y que se agradecerían otras soluciones para despachadores. CherryPy 3 proporciona otros despachadores integrados y ofrece una forma sencilla de escribir y utilizar sus propios despachadores.

  • Aplicaciones utilizadas para desarrollar métodos HTTP. (OBTENER, PUBLICAR, PONER, etc.)
  • El que define las rutas en la URL - Routes Dispatcher

Despachador del método HTTP

En algunas aplicaciones, los URI son independientes de la acción, que debe realizar el servidor en el recurso.

Por ejemplo,http://xyz.com/album/delete/10

La URI contiene la operación que el cliente desea realizar.

De forma predeterminada, el despachador de CherryPy se asignaría de la siguiente manera:

album.delete(12)

El despachador mencionado anteriormente se menciona correctamente, pero se puede hacer independiente de la siguiente manera:

http://xyz.com/album/10

El usuario puede preguntarse cómo el servidor distribuye la página exacta. Esta información es transportada por la propia solicitud HTTP. Cuando hay una solicitud de cliente a servidor, CherryPy parece el mejor controlador adecuado, el controlador es la representación del recurso al que apunta el URI.

DELETE /album/12 HTTP/1.1

Despachador de rutas

Aquí hay una lista de los parámetros para el método requerido en el envío:

  • El parámetro de nombre es el nombre exclusivo de la ruta para conectarse.

  • La ruta es el patrón para hacer coincidir los URI.

  • El controlador es la instancia que contiene los controladores de página.

  • El despachador de rutas conecta un patrón que coincide con los URI y asocia un controlador de página específico.

Ejemplo

Tomemos un ejemplo para entender cómo funciona:

import random
import string
import cherrypy

class StringMaker(object):
   @cherrypy.expose
   def index(self):
      return "Hello! How are you?"
   
   @cherrypy.expose
   def generate(self, length=9):
      return ''.join(random.sample(string.hexdigits, int(length)))
		
if __name__ == '__main__':
   cherrypy.quickstart(StringMaker ())

Siga los pasos que se indican a continuación para obtener el resultado del código anterior:

Step 1 - Guarde el archivo mencionado anteriormente como tutRoutes.py.

Step 2 - Visite la siguiente URL -

http://localhost:8080/generate?length=10

Step 3 - Recibirá el siguiente resultado -