2009-02-23 13 views
5

sto cercando in supporto HTTP/1.1 Byte serving in WSGI del server/applicazioni per:WSGI byte spazia servire

  • riprendere i download parziali
  • download in più parti
  • meglio lo streaming

WSGI PEP 333 menzioni il server WSGI può implementare la gestione della pubblicazione di byte (da RFC 2616 la sezione 14.35.2 definisce Accetta-Intervallo/Intervallo/Intervallo di contenuto risposta/richiesta/risposta h eaders) e l'applicazione dovrebbe attuarlo se annuncia la capacità:

Un server può trasmettere intervalli di byte di risposta dell'applicazione, se richiesto dal cliente, e l'applicazione non supporta nativamente intervalli di byte. Di nuovo, tuttavia, l'applicazione dovrebbe eseguire questa funzione se lo desidera.

Ho eseguito alcune ricerche su Google, ma ho trovato poche informazioni su quali server/middleware/applicazioni WSGI disponibili implementano Byte-Ranges? Qualcuno ha un'esperienza nel campo e può suggerirmi di scavare ulteriormente?

EDIT: Qualcuno può commentare, come posso migliorare la domanda per essere in grado di trovare una risposta?

+0

Se non hai fortuna qui, prova http://mail.python.org/mailman/listinfo/web-sig. Personalmente, non sento montare gamme di byte e wsgi. – Constantin

+0

Lo farà. Ho persino preparato post nelle mie Bozze, che è in attesa di un giorno o due per vedere se c'è qualche risposta qui. – myroslav

risposta

3

Penso che webob possa fare il trucco, vedere la fine dello file example per un'implementazione di richiesta di intervallo che cerca in modo efficiente nel file che viene servito.

0

È sufficiente utilizzare WebOb e creare la risposta come Response(conditional_request=True) o subclass the WebOb Response object rendendo conditional_request=True l'impostazione predefinita.

Quando conditional_request=True e la richiesta hanno richiesto un intervallo, Response.app_iter_range di WebOb esegue il wrapping della risposta completa per restituire solo l'intervallo richiesto.

Il WebOb file serving example mostra come implementare il proprio app_iter_range per i casi in cui è pratico ottenere un intervallo di byte senza generare l'intera risposta.