代码之家  ›  专栏  ›  技术社区  ›  slacy

支持分块编码的python HTTP服务器?

  •  6
  • slacy  · 技术社区  · 16 年前

    我正在寻找一个支持良好的多线程python http服务器,它支持分块编码应答。(即响应上的“传输编码:分块”)。为此目的,最好从哪一个HTTP服务器库开始?

    4 回复  |  直到 8 年前
        1
  •  5
  •   Jarret Hardie    16 年前

    扭曲的支架 chunked transfer encoding (API link) (另见API文件 HTTPChannel )有许多使用Twisted的生产级项目(例如,苹果将其用于Mac OS X服务器中的iCalendar服务器),因此它得到了很好的支持,并且非常健壮。

        2
  •  2
  •   mathieu    13 年前

    Twisted支持分块传输,而且传输透明。也就是说,如果请求处理程序没有指定响应长度,Twisted将自动切换到分块传输,并且它将为每个请求写入调用生成一个块。

        3
  •  0
  •   Shane C. Mason    16 年前

    我非常确信符合WSGi的服务器应该支持这一点。本质上,wsgi应用程序返回可ITable块,Web服务器返回该块。我对这个没有第一手经验,但这里有一个 list of compliant servers .

    不过,我认为如果wsgi服务器不能满足您的需求,那么使用Python内置的 CGIHTTPServer . 它已经是多线程的,所以应该由您来分割响应。

        4
  •  0
  •   Iulian Onofrei Denis Oliveira    8 年前

    我设法用 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()