首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BaseHttpServer与wsgiref.simple_server的差异

BaseHttpServer与wsgiref.simple_server的差异
EN

Stack Overflow用户
提问于 2014-09-01 20:01:23
回答 1查看 1.2K关注 0票数 6

我正在寻找一个模块,它为我提供了本地访问的基本http服务器功能。在标准库中,Python似乎有两种实现简单http服务器的方法:服务器BaseHttpServer

有什么不同吗?有什么强烈的理由选择一个比另一个更好吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-20 19:00:56

简短回答: wsgiref.simple_serverBaseHTTPServer上的WSGI适配器。

更长的答案:

BaseHTTPServer (以及它所构建的SocketServer )是实现大多数实际HTTP服务器的模块。它可以接受请求并返回响应,但是它必须知道如何处理这些请求。当直接使用BaseHTTPServer时,可以通过子类BaseHTTPRequestHandler来提供处理程序,例如:

代码语言:javascript
复制
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中,您以函数的形式提供处理程序,例如:

代码语言:javascript
复制
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.HTTPServerSocketServer.TCPServer的大多数实际协议/网络逻辑(尽管它最终确实重新实现了一些简单的HTTP规则)。主要不同之处在于您将应用程序代码与该逻辑集成的方式。

这确实取决于您想要解决的问题,但是针对wsgiref进行编码可能是一个更好的主意,因为它将使您在将来很容易转移到另一个生产级的HTTP服务器,比如uWSGI古尼坎

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25612290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档