Foi útil?

Solução

Como WSGI, CGI, e os quadros são todos conectados?

Apache escuta na porta 80. Ela recebe uma solicitação HTTP. Ele analisa o pedido para encontrar uma maneira de responder. Apache tem um monte de opções para responder. Uma maneira de responder é usar CGI para executar um script. Outra maneira de responder é simplesmente servir um arquivo.

No caso do CGI, Apache prepara-se um ambiente e invoca o script através do protocolo CGI. Esta é uma situação normal Unix Fork / Exec - o subprocesso CGI herda um ambiente OS incluindo o soquete e stdout. O subprocesso CGI escreve uma resposta, que remonta a Apache; Apache envia essa resposta para o navegador.

CGI é primitivo e irritante. Principalmente porque ele bifurca um subprocesso para cada pedido, e sair subprocess obrigação ou fechar stdout e stderr para significar fim da resposta.

WSGI é uma interface que é baseado no padrão de design CGI. Não é necessariamente CGI - ele não tem de desembolsar um subprocesso para cada solicitação. Pode ser CGI, mas ele não tem que ser.

WSGI contribui para o padrão de design CGI em vários aspectos importantes. Ele analisa os cabeçalhos de solicitação HTTP para você e adiciona-los para o meio ambiente. Ela fornece qualquer entrada orientada para o POST como um objeto de arquivo-como no meio ambiente. Ele também fornece uma função que irá formular a resposta, poupando-o de um monte de formatação detalhes.

O que eu preciso saber / instalar / fazer se eu quiser executar um framework web (web.py dizer ou cherrypy) na minha configuração básica CGI?

Lembre-se que bifurcação um subprocesso é caro. Há duas maneiras de contornar isso.

  1. Incorporado mod_wsgi ou mod_python embute o Python dentro do Apache; nenhum processo é bifurcada. Apache executa o aplicativo Django diretamente.

  2. daemon mod_wsgi ou mod_fastcgi permite Apache para interagir com um daemon separado (ou "processo de longa duração"), utilizando o protocolo WSGI. Você começa o seu processo Django longa, então você configurar mod_fastcgi do Apache para se comunicar com este processo.

Note que mod_wsgi pode trabalhar em qualquer modo:. Incorporado ou daemon

Quando você ler sobre mod_fastcgi, você verá que o Django usa FLUP para criar uma interface WSGI compatível com base nas informações fornecidas por mod_fastcgi. O gasoduto funciona assim.

Apache -> mod_fastcgi -> FLUP (via FastCGI protocol) -> Django (via WSGI protocol)

Django tem vários "django.core.handlers" para as várias interfaces.

Para mod_fastcgi, Django fornece uma manage.py runfcgi que integra FLUP eo manipulador.

Para mod_wsgi, há um manipulador de núcleo para isso.

Como instalar o suporte WSGI?

Siga estas instruções.

https://code.google.com/archive/p/ modwsgi / wikis / IntegrationWithDjango.wiki

Para o fundo ver este

http://docs.djangoproject.com/en / dev / howto / implantação / # howto-implantação índice

Outras dicas

resposta de Florian responde a parte da sua pergunta sobre "o que é WSGI", especialmente se você ler o PEP .

Como para as perguntas que você representar para o final:

WSGI, CGI, FastCGI etc, são todos os protocolos para um servidor web para código executar , e entregar o conteúdo dinâmico que é produzido. Compare isto com a web estática servir, onde um arquivo HTML simples é basicamente entregue como é para o cliente.

CGI, FastCGI e SCGI são agnósticos linguagem. Você pode escrever scripts CGI em Perl, Python, C, bash, o que for. define CGI que executável será chamado, baseado na URL, e como ele será chamado: os argumentos e meio ambiente. Ele também define como o valor de retorno deve ser passado de volta para o servidor web uma vez que seu executável está terminado. As variações são basicamente otimizações para ser capaz de lidar com mais solicitações, reduzir a latência e assim por diante; o conceito básico é o mesmo.

.

WSGI é Python única Ao invés de um protocolo agnóstico linguagem, uma assinatura função padrão é definido:

def simple_app(environ, start_response):
    """Simplest possible application object"""
    status = '200 OK'
    response_headers = [('Content-type','text/plain')]
    start_response(status, response_headers)
    return ['Hello world!\n']

Isso é uma aplicação WSGI completo (se limitado). Um servidor Web com suporte WSGI (como o Apache com mod_wsgi) pode invocar esta função sempre que um pedido chega.

A razão isto é tão grande é que podemos evitar o passo confuso de conversão de um HTTP GET / POST para CGI para Python, e de volta no caminho para fora. É uma ligação muito mais direta, limpa e eficiente.

Ele também torna muito mais fácil ter estruturas de longa execução correndo atrás de servidores web, se tudo o que precisa ser feito para um pedido é uma chamada de função. Com CGI simples, você teria que começar todo o seu quadro se para cada pedido individual.

Para ter suporte WSGI, você precisa ter instalado um módulo WSGI (como mod_wsgi ), ou usar um servidor web com WSGI cozido em (como CherryPy ). Se nenhum desses são possíveis, você poderia usar a ponte CGI-WSGI dada no PEP.

Você pode prazo WSGI sobre CGI como Pep333 demonstra como um exemplo. No entanto cada vez que há um pedido de um novo interpretador Python é iniciado e todo o contexto (conexões de banco de dados, etc.) precisa ser construído, que todos levam tempo.

A melhor se você deseja executar WSGI seria se o seu host iria instalar mod_wsgi fez uma configuração apropriada para o controle submeter a uma aplicação de seu.

Flup é outra maneira de correr com WSGI para qualquer servidor web que pode falar FCGI , SCGI ou AJP. Da minha experiência única FCGI realmente funciona, e ele pode ser usado no Apache ou via mod_fastcgi ou se você pode executar um daemon Python separado com mod_proxy_fcgi .

WSGI é um protocolo muito parecido com CGI, que define um conjunto de regras como servidor web e Python código pode interagir, é definido como Pep333 . Ele torna possível que muitos servidores web diferentes podem usar muitos frameworks e aplicações diferentes usando o mesmo protocolo de aplicação. Isto é muito benéfico e torna tão útil.

Se você não são claras sobre todos os termos deste espaço, e vamos enfrentá-lo, é uma confundindo um acrónimo-laden, há também um leitor bom fundo na forma de um HOWTO oficial python que discute CGI vs. FastCGI vs. WSGI e assim por diante: http://docs.python.org/howto/webservers.html

É uma camada de abstração simples para Python, semelhante ao que a especificação Servlet é para Java. Considerando CGI é realmente baixo nível e apenas despeja o material no ambiente de processo e padrão in / out, o acima duas especificações modelar o pedido HTTP e resposta como construções na linguagem. Minha impressão, porém, é que em pessoas Python não tem muito liquidada em implementações de-facto para que você tenha uma mistura de implementações de referência, e outras bibliotecas do tipo utilitário que fornecem outras coisas, juntamente com o apoio WSGI (por exemplo Cole). É claro que eu poderia estar errado, eu sou um recém-chegado ao Python. A comunidade "scripting web" está vindo para o problema de uma direção diferente (hospedagem compartilhada, o legado CGI, as preocupações de separação de privilégio) do que pessoas Java teve o luxo de começar com (a execução de um único recipiente empresa em um ambiente dedicado contra estaticamente compilado e implantado código).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top