Короткий ответ:wsgiref.simple_server
- адаптер WSGI за BaseHTTPServer
.
Более длинный ответ:
BaseHTTPServer
(и SocketServer
, на котором он строит) является модуль, который реализует большую часть фактического сервера HTTP. Он может принимать запросы и возвращать ответы, но он должен знать, как обрабатывать эти запросы. При использовании BaseHTTPServer
напрямую, вы предоставляете обработчики по подклассов BaseHTTPRequestHandler
, например:
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
адаптирует этот BaseHTTPServer
интерфейс к WSGI спецификации, которая является стандартом для серверных независимый Python веб-приложений. В WSGI, вы обеспечивают обработчик в виде функции, например:
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()
make_server
функция возвращает экземпляр WSGIServer
, который наследует большую часть фактического протокола/сетевой логики от BaseHTTPServer.HTTPServer
и SocketServer.TCPServer
(хотя в конечном итоге переопределяет некоторые простые правила HTTP). Что в основном отличается тем, как вы интегрируете свой код приложения с этой логикой.
Это действительно зависит от проблемы, которую вы пытаетесь решить, но кодирование против wsgiref
, вероятно, является лучшей идеей, потому что вам будет легче перейти на другой, производственный HTTP-сервер, такой как uWSGI или Gunicorn, в будущем.