2014-09-01 10 views

Antwort

7

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.