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.