2010-05-28 131 views
8

我有類似如下的觀點:流HTTP響應,刷新瀏覽器

from django.views.decorators.http import condition 

def stream(): 
    for i in range(0, 40): 
     yield " " * 1024 
     yield "%d" % i 
     time.sleep(1) 

@condition(etag_func=None): 
def view(request): 
    return HttpResponse(stream(), mimetype='text/html') 

但是,它肯定似乎並沒有在所有被流。所有的數據都會在大約40秒後立即被轉儲。我如何才能正確刷新?

+1

相關:http://stackoverflow.com/questions/2922874/how-to-stream-an-httpresponse-with-django – miku 2010-05-28 22:36:06

+0

是的,這就是我得到的代碼想法嘗試,但是,它似乎並不爲我工作。不知道我在這裏做錯了什麼。 – synic 2010-05-28 22:47:16

+0

你正在做的事情完全不是標準的,只是由於某些瀏覽器實現http的細節而發生的奇蹟。我會說,嘗試一堆瀏覽器和不同數量的空白。最終,你可能會發現一個可遠程利用的安全漏洞。 – 2010-06-04 07:58:53

回答

3

要使http流正​​常工作,您的中間件,WSGI容器和Web服務器(以及反向代理/負載平衡器,如果您使用nginx + apache2 syle部署)都必須支持它。禁用中間件並刪除一些圖層,直到它工作(緩存或設置etags的任何內容都沒有了),然後將它們添加回去。我不知道你有什麼堆棧,但是IIRC apache2 + mod_python對於流式處理是可以的,儘管這不是推薦Django服務的方式。

+1

謝謝!這幫助了我。在nginx的情況下,我需要'proxy_buffering off';'。 – d33tah 2015-10-30 19:53:32