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 -