2010-05-28 10 views
8

ho una vista simile alla seguente:Streaming risposta HTTP, vampate di calore al browser

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

Tuttavia, sicuramente non sembra essere in streaming a tutti. Tutti i dati vengono scaricati contemporaneamente, alla fine, dopo circa 40 secondi. Come posso farlo sciacquare correttamente?

+1

correlati: http://stackoverflow.com/questions/2922874/how-to-stream-an-httpresponse-with-django – miku

+0

Sì, è lì che ho trovato le idee di codice da provare, tuttavia, non sembra lavorare per me. Non sono sicuro di cosa sto facendo male qui. – synic

+0

Quello che stai facendo è completamente non standard e solo un miracolo che si verifica a causa dei dettagli di come alcuni browser implementano http. Direi, provalo con un sacco di browser e quantità variabili di spazi bianchi. Alla fine, probabilmente troverai un buco di sicurezza sfruttabile da remoto. –

risposta

3

Per fare in modo che lo streaming http funzioni, il middleware, il contenitore WSGI e il server Web (nonché il proxy inverso/bilanciamento del carico se si utilizza una distribuzione nginx + apache2 syle) devono supportarlo. Disabilita il middleware e rimuovi alcuni dei livelli fino a quando non funziona (tutto ciò che fa il caching o set etags è fuori), quindi aggiungili di nuovo. Non so quale stack hai, ma IIRC apache2 + mod_python è OK con lo streaming, anche se non è il modo consigliato di servire Django.

+1

Grazie! Questo mi ha aiutato. In caso di nginx, avevo bisogno di 'proxy_buffering off;'. – d33tah

Problemi correlati