2016-12-01 6 views
0

Моего питона версия 3.4, моя смерч версии 4.3.My код выглядит так:Как сделать Python смерч генерировать фрагментированный ответ

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() 

Это просто не может работать, клиент просто ждать, пока кусок заканчивается. Как правильно сформировать ответный ответ при использовании сервера торнадо?

ответ

4

Один звонок write приведет к одному блоку в ответе. Чтобы получить несколько кусков, вы должны вызывать write несколько раз, каждый раз промывать, и yield между ними (если вы ничего не уступаете, тогда нет смысла использовать куски для ответа).

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

Также не устанавливайте заголовок Transfer-Encoding вручную (кроме случаев, когда вы также генерируете все кадровое кодирование с кодировкой). Это для управления сервером. –

 Смежные вопросы

  • Нет связанных вопросов^_^