我正在寻找一个模块,它为我提供了本地访问的基本http服务器功能。在标准库中,Python似乎有两种实现简单http服务器的方法:服务器和BaseHttpServer。
有什么不同吗?有什么强烈的理由选择一个比另一个更好吗?
发布于 2015-10-20 19:00:56
简短回答: wsgiref.simple_server是BaseHTTPServer上的WSGI适配器。
更长的答案:
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或古尼坎。
https://stackoverflow.com/questions/25612290
复制相似问题