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.