Servidor Http integrado e mecanismo interno

CherryPy vem com seu próprio servidor web (HTTP). É por isso que o CherryPy é independente e permite que os usuários executem um aplicativo CherryPy poucos minutos depois de obter a biblioteca.

o web server atua como o gateway para o aplicativo com a ajuda do qual todas as solicitações e respostas são mantidas sob controle.

Para iniciar o servidor web, um usuário deve fazer a seguinte chamada -

cherryPy.server.quickstart()

o internal engine of CherryPy é responsável pelas seguintes atividades -

  • Criação e gerenciamento de objetos de solicitação e resposta.
  • Controlar e gerenciar o processo CherryPy.

CherryPy - Configuração

O framework vem com seu próprio sistema de configuração permitindo parametrizar o servidor HTTP. As configurações para a configuração podem ser armazenadas em um arquivo de texto com sintaxe próxima ao formato INI ou como um dicionário Python completo.

Para configurar a instância do servidor CherryPy, o desenvolvedor precisa usar a seção global das configurações.

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"

Conformidade HTTP

CherryPy tem evoluído lentamente, mas inclui a compilação de especificações HTTP com o suporte de HTTP / 1.0 transferindo posteriormente com o suporte de HTTP / 1.1.

CherryPy é considerado condicionalmente compatível com HTTP / 1.1, uma vez que implementa todos os níveis obrigatórios e obrigatórios, mas não todos os níveis obrigatórios da especificação. Portanto, CherryPy suporta os seguintes recursos de HTTP / 1.1 -

  • Se um cliente afirma suportar HTTP / 1.1, ele deve enviar um campo de cabeçalho em qualquer solicitação feita com a versão de protocolo especificada. Se não for feito, CherryPy interromperá imediatamente o processamento da solicitação.

  • CherryPy gera um campo de cabeçalho de data que é usado em todas as configurações.

  • CherryPy pode lidar com o código de status de resposta (100) com o suporte de clientes.

  • O servidor HTTP embutido do CherryPy suporta conexões persistentes que são o padrão em HTTP / 1.1, através do uso do cabeçalho Connection: Keep-Alive.

  • CherryPy lida com solicitações e respostas em partes corretamente.

  • CherryPy oferece suporte a solicitações de duas maneiras distintas - cabeçalhos If-Modified-Since e If-Unmodified-Since e envia respostas de acordo com as solicitações em conformidade.

  • CherryPy permite qualquer método HTTP.

  • CherryPy lida com as combinações de versões HTTP entre o cliente e a configuração definida para o servidor.

Servidor de aplicativos multithread

CherryPy é projetado com base no conceito de multithreading. Cada vez que um desenvolvedor obtém ou define um valor no namespace CherryPy, isso é feito no ambiente multithread.

Cherrypy.request e cherrypy.response são contêineres de dados de thread, o que implica que seu aplicativo os chama de forma independente, sabendo qual solicitação é enviada por proxy por meio deles no tempo de execução.

Os servidores de aplicativos que usam o padrão encadeado não são altamente considerados porque o uso de encadeamentos é visto como um aumento da probabilidade de problemas devido aos requisitos de sincronização.

As outras alternativas incluem -

Padrão Multi-processo

Cada solicitação é tratada por seu próprio processo Python. Aqui, o desempenho e a estabilidade do servidor podem ser considerados melhores.

Padrão Assíncrono

Aqui, aceitar novas conexões e enviar os dados de volta ao cliente é feito de forma assíncrona a partir do processo de solicitação. Esta técnica é conhecida por sua eficiência.

Envio de URL

A comunidade CherryPy quer ser mais flexível e que outras soluções para despachantes sejam apreciadas. CherryPy 3 fornece outros despachantes integrados e oferece uma maneira simples de escrever e usar seus próprios despachantes.

  • Aplicativos usados ​​para desenvolver métodos HTTP. (GET, POST, PUT, etc.)
  • Aquele que define as rotas no URL - Expedidor de rotas

Dispatcher de método HTTP

Em alguns aplicativos, os URIs são independentes da ação, que deve ser executada pelo servidor no recurso.

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

O URI contém a operação que o cliente deseja realizar.

Por padrão, o despachante CherryPy mapearia da seguinte maneira -

album.delete(12)

O despachante mencionado acima é mencionado corretamente, mas pode ser independente da seguinte maneira -

http://xyz.com/album/10

O usuário pode se perguntar como o servidor despacha a página exata. Essas informações são transportadas pela própria solicitação HTTP. Quando há uma solicitação do cliente para o servidor, CherryPy parece o manipulador mais adequado, o manipulador é a representação do recurso visado pelo URI.

DELETE /album/12 HTTP/1.1

Expedidor de rotas

Aqui está uma lista dos parâmetros para o método necessário no despacho -

  • O parâmetro name é o nome exclusivo da rota a ser conectada.

  • A rota é o padrão para combinar URIs.

  • O controlador é a instância que contém os manipuladores de página.

  • Usar o distribuidor de rotas conecta um padrão que corresponde a URIs e associa um manipulador de página específico.

Exemplo

Vamos dar um exemplo para entender como 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 as etapas abaixo para obter a saída do código acima -

Step 1 - Salve o arquivo mencionado acima como tutRoutes.py.

Step 2 - Visite o seguinte URL -

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

Step 3 - Você receberá a seguinte saída -