我正在寻找一个支持良好的多线程Python HTTP服务器,它支持分块编码回复。 (即响应中的“转移编码:分块”)。为此目的,最好的HTTP服务器基础是什么?
答案 0 :(得分:5)
Twisted support chunked transfer encoding (API link)(另请参阅HTTPChannel的API文档)。有许多使用Twisted的生产级项目(例如,Apple将它用于Mac OS X Server中的iCalendar服务器),因此它得到了很好的支持并且非常强大。
答案 1 :(得分:2)
Twisted支持分块传输,它可以透明地完成。即,如果您的请求处理程序未指定响应长度,则twisted将自动切换到chunked transfer,并且每次调用Request.write时将生成一个块。
答案 2 :(得分:0)
我非常确定符合WSGI的服务器应该支持这一点。实质上,WSGI应用程序返回Web服务器返回的可迭代块。我没有第一手经验,但这里有list of compliant servers。
我认为,如果使用Python的内置CGIHTTPServer,如果WSGI服务器不符合您的要求,那么滚动自己会相当容易。它已经是多线程的,所以你可以自己决定回复。
答案 3 :(得分:0)
我设法使用Tornado:
#!/usr/bin/env python
import logging
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, options
define("port", default=8080, help="run on the given port", type=int)
@tornado.web.stream_request_body
class MainHandler(tornado.web.RequestHandler):
def post(self):
print()
def data_received(self, chunk):
self.write(chunk)
logging.info(chunk)
def main():
tornado.options.parse_command_line()
application = tornado.web.Application([
(r"/", MainHandler),
])
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(options.port)
tornado.ioloop.IOLoop.current().start()
if __name__ == "__main__":
main()