Kurze Antwort:wsgiref.simple_server
ist ein WSGI-Adapter über BaseHTTPServer
.
Longer Antwort:
BaseHTTPServer
(und SocketServer
, auf dem es basiert) ist das Modul, das die meisten der aktuellen HTTP-Server implementiert. Es kann Anfragen annehmen und Antworten zurückgeben, aber es muss wissen, wie es mit diesen Anfragen umgeht. Wenn Sie BaseHTTPServer
direkt verwenden, bieten Sie die Handler von BaseHTTPRequestHandler
Subklassen, zum Beispiel:
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
diese BaseHTTPServer
Schnittstelle zur Spezifikation WSGI passen, die der Standard für serverunabhängige Python Web-Anwendungen ist. In WSGI stellen Sie den Handler in Form einer Funktion, zum Beispiel:
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()
Die make_server
Funktion eine Instanz von WSGIServer
zurückgibt, die die meisten der aktuellen Protokoll/Netzwerklogik von BaseHTTPServer.HTTPServer
und SocketServer.TCPServer
(obwohl es erbt führt dazu, einige einfache Regeln von HTTP neu zu implementieren). Was hauptsächlich unterscheidet, ist die Art, wie Sie Ihren Anwendungscode mit dieser Logik integrieren.
Es hängt wirklich von dem Problem ab, das Sie versuchen zu lösen, aber die Codierung gegen wsgiref
ist wahrscheinlich eine bessere Idee, weil es Ihnen den Wechsel zu einem anderen HTTP-Server in Produktionsqualität erleichtert, wie uWSGI oder Gunicorn, in der Zukunft.