2009-04-08 25 views

答えて

5

ツイストサポートchunked transfer encoding (API link)HTTPChannelのAPIドキュメントも参照してください)。 Twistedを使用したプロダクショングレードのプロジェクトが数多くあります(たとえば、Mac OS X ServerのiCalendarサーバ用にAppleが使用しています)ので、サポートされており、非常に堅牢です。

+0

おかげで、私はツイストを聞いたが、私の第一印象は、それが私の仕事のためのビットヘビー級だったということでした。残りのものを使わずにtwisted.webをダウンロードして実行できるように見えるので、もう一度見ていきます。 – slacy

+0

私はあなたの気持ちを理解しています...ひねった大きなAPIを持って、ちょっと嵩張っているように見え、多少の学習曲線があります。それは当初も私を止めましたが、時にはそれが仕事のための正しいツールであることがわかりました:-) –

0

私は、WSGI準拠のサーバーがそれをサポートしていることを確信しています。基本的に、WSGIアプリケーションは、Webサーバーが返す繰り返し可能なチャンクを返します。私はこれで初めての経験はありませんが、list of compliant serversです。

WSGIサーバーがPythonの組み込みのCGIHTTPServerを使用して、探しているものを満たしていないと、自分自身をロールバックするのはかなり簡単だと思います。すでにマルチスレッド化されているので、応答をチャンクするだけで済みます。

2

ツイストサポートはチャンク転送をサポートしており、透過的です。リクエストハンドラが応答長を指定していない場合、twistedは自動的にチャンク転送に切り替わり、Request.writeへの呼び出しごとに1つのチャンクを生成します。

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() 
関連する問題