2014-09-01 20 views

Odpowiedz

7

Krótka odpowiedź:wsgiref.simple_server jest adapterem WSGI nad BaseHTTPServer.

Dłuższa odpowiedź:

BaseHTTPServer (i SocketServer, na której buduje) to moduł, który implementuje większość rzeczywistego serwera HTTP. Może akceptować żądania i zwracać odpowiedzi, ale musi wiedzieć, jak obsługiwać te żądania. Kiedy używasz BaseHTTPServer bezpośrednio podać procedury obsługi przez instacji BaseHTTPRequestHandler, na przykład:

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 dostosowuje tę BaseHTTPServer interfejs do specyfikacji WSGI, który jest standardem dla aplikacji internetowych serwerów Python niezależne. W WSGI, podać obsługi w formie, na przykład z:

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() 

Funkcja make_server zwraca wystąpienie WSGIServer, która dziedziczy większości rzeczywistych logika protokołu/sieciowej z BaseHTTPServer.HTTPServer i SocketServer.TCPServer (chociaż kończy reimplementacja kilku prostych reguł HTTP). Zasadniczo różni się sposób integrowania kodu aplikacji z tą logiką.

To naprawdę zależy od problemu, który próbujesz rozwiązać, ale kodowanie przeciwko wsgiref jest prawdopodobnie lepszym pomysłem, ponieważ ułatwi ci to przeniesienie do innego, produkcyjnego serwera HTTP, takiego jak uWSGI lub Gunicorn, w przyszłości.