【问题标题】:How to make Python tornado generate chunked response如何使 Python 龙卷风生成分块响应
【发布时间】:2017-04-15 12:59:56
【问题描述】:

我的python版本是3.4,我的tornado版本是4.3。我的代码是这样的:

import tornado.ioloop
import tornado.web
import tornado.httputil
import tornado.httpserver


class MainHandler(tornado.web.RequestHandler):
    def get(self):
        body = 'foobar'*10
        self.set_header('Transfer-Encoding', 'chunked')
        self.write(body)
        self.flush()
        self.finish()


app = tornado.web.Application([
        (r'/chunked', MainHandler),
])

if __name__ == "__main__":
    app.listen(8080)
    tornado.ioloop.IOLoop.current().start()

这根本行不通,客户端只是等待分块结束。使用tornado服务器时如何正确生成分块响应?

【问题讨论】:

    标签: python tornado httpresponse chunked


    【解决方案1】:

    write 的一次调用将在响应中产生一个块。要获得多个块,您必须多次调用write,每次都刷新,并在两者之间调用yield(如果您没有产生任何东西,那么使用块作为响应没有任何价值)。

    @tornado.gen.coroutine
    def get(self):
        for i in range(10):
            self.write('foobar')
            yield self.flush()
    

    【讨论】:

    • 另外,不要手动设置 Transfer-Encoding 标头(除非您还生成所有分块编码帧)。这是由服务器框架控制的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多