Я пытаюсь добраться 'привет мир' потоковой передачи ответов, работающих на Django (1.2). Я выяснил, как использовать генератор и yield
функция. Но ответ, все еще не передающий потоком. Я подозреваю, что существует промежуточное программное обеспечение, которое это унавоживает с ним - возможно, калькулятор ЗАВЕРШАЮЩЕГО ТЕГА? Но я не уверен, как отключить его. Кто-то может помочь?
Вот "привет мир", потоковой передачи этого я имею до сих пор:
def stream_response(request):
resp = HttpResponse( stream_response_generator())
return resp
def stream_response_generator():
for x in range(1,11):
yield "%s\n" % x # Returns a chunk of the response to the browser
time.sleep(1)
Вы можете отключить промежуточное ПО ETAG с помощью декоратора condition decorator. Это заставит ваш ответ передаваться обратно по HTTP. Вы можете подтвердить это с помощью инструмента командной строки, например curl
. Но этого, вероятно, будет недостаточно, чтобы заставить браузер показать ответ в потоковом режиме. Чтобы побудить браузер показать ответ по мере его передачи, вы можете поместить кучу пробельных символов в трубу, чтобы заставить ее буферы заполниться. Пример:
from django.views.decorators.http import condition
@condition(etag_func=None)
def stream_response(request):
resp = HttpResponse( stream_response_generator(), content_type='text/html')
return resp
def stream_response_generator():
yield "<html><body>\n"
for x in range(1,11):
yield "<div>%s</div>\n" % x
yield " " * 1024 # Encourage browser to render incrementally
time.sleep(1)
yield "</body></html>\n"