2014-09-01 38 views

risposta

7

Risposta breve:wsgiref.simple_server è un adattatore WSGI sopra BaseHTTPServer.

Più rispondere:

BaseHTTPServer (e SocketServer, su cui si costruisce) è il modulo che implementa la maggior parte dei server HTTP vero e proprio. Può accettare richieste e restituire risposte, ma deve sapere come gestire tali richieste. Quando si utilizza BaseHTTPServer direttamente, è necessario fornire i gestori dal sottoclasse BaseHTTPRequestHandler, ad esempio:

from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler 

class MyHandler(BaseHTTPRequestHandler): 

    def do_GET(self): 
     self.send_response(200) 
     self.send_header('Content-Type', 'text/plain') 
     self.end_headers() 
     self.wfile.write('Hello world!\n') 

HTTPServer(('', 8000), MyHandler).serve_forever() 

wsgiref.simple_server adatta questa BaseHTTPServer interfaccia per la specifica WSGI, che è lo standard per le applicazioni Python Web server indipendente. In WSGI, si fornisce il conduttore sotto forma di una funzione, ad esempio:

from wsgiref.simple_server import make_server 

def my_app(environ, start_response): 
    start_response('200 OK', [('Content-Type', 'text/plain')]) 
    yield 'Hello world!\n' 

make_server('', 8000, my_app).serve_forever() 

La funzione make_server restituisce un'istanza di WSGIServer, che eredita maggior parte della logica attuale protocollo/rete da BaseHTTPServer.HTTPServer e SocketServer.TCPServer (sebbene finisce per reimplementare alcune semplici regole di HTTP). Ciò che differisce principalmente è il modo in cui si integra il codice dell'applicazione con quella logica.

In realtà dipende il problema che stai cercando di risolvere, ma di codifica contro wsgiref è probabilmente una migliore idea, perché renderà più facile per voi di passare a un server HTTP diverso, la produzione di qualità, come ad esempio uWSGI o Gunicorn, in futuro.