Guy*_*Guy 6 python basehttpserver wsgiref
我正在寻找一个模块,为我提供本地访问的基本http服务器功能.看起来Python有两种方法可以在标准库中实现简单的http服务器:wsgiref.simple_server和BaseHttpServer.
有什么区别?是否有任何强烈的理由偏爱一个而不是另一个?
简答: 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()
Run Code Online (Sandbox Code Playgroud)
wsgiref.simple_server使此BaseHTTPServer接口适应WSGI规范,该规范是与服务器无关的Python Web应用程序的标准.在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()
Run Code Online (Sandbox Code Playgroud)
该make_server函数返回一个实例WSGIServer,它继承了大部分实际的协议/网络逻辑,BaseHTTPServer.HTTPServer并且SocketServer.TCPServer(尽管它最终重新实现了一些简单的HTTP规则).主要区别在于您将应用程序代码与该逻辑集成的方式.
这真的取决于你试图解决的问题,但对编码wsgiref可能是一个更好的主意,因为它会很容易让你移动到不同的生产级的HTTP服务器,如uWSGI或Gunicorn,在未来.
| 归档时间: |
|
| 查看次数: |
818 次 |
| 最近记录: |