2009-04-08 57 views
5

我正在尋找一個支持分塊編碼回覆的支持良好的多線程Python HTTP服務器。 (也就是說,「傳輸編碼:分塊」)。爲此目的開始的最佳HTTP服務器基礎是什麼?支持分塊編碼的Python HTTP服務器?

回答

5

扭曲支撐chunked transfer encoding (API link)(另請參閱HTTPChannel的API文檔)。有許多使用Twisted的生產級項目(例如,Apple將它用於Mac OS X Server中的iCalendar服務器),因此它得到了很好的支持並且非常強大。

+0

謝謝,我聽說扭曲的,但我的第一印象是,這是我的任務有點重量級。我要再看一下,因爲它看起來像你可以下載並運行twisted.web而沒有其他的東西。 – slacy 2009-04-09 06:18:04

0

我很確定WSGI兼容服務器應該支持。本質上,WSGI應用程序返回Web服務器返回的可迭代塊。我沒有這方面的第一手經驗,但這是一個list of compliant servers

我應該認爲,如果WSGI服務器不符合你的要求,使用Python內置的CGIHTTPServer,你可以很容易地推出自己的產品。它已經是多線程的,所以它只是由你來分組響應。

2

扭曲的支持分塊傳輸,它是透明的。即如果您的請求處理程序未指定響應長度,則twisted將自動切換爲分塊傳輸,並且每次調用request.write時都會生成一個塊。

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() 
相關問題