2012-05-21 12 views
5

Sto provando a servire mp4/video nell'ambiente di sviluppo python di GAE (usando dev_appserver.py), ma fino ad ora non ero in grado di riprodurlo sul mio browser.Come posso pubblicare un filmato dal server di sviluppo (dev_appserver.py) di GAE Python?

Poiché l'errore "Broken Pipe" è accaduto sul server di sviluppo e sono riuscito a riprodurlo nell'ambiente di produzione (sul server di google), il problema potrebbe essere causato dalle richieste parallele del browser. (Se la mia comprensione è corretta, dev_appserver.py è single-threaded e non può gestire richieste parallele.)

Ho provato l'opzione '--disable-preconnect' di Chrome, ma non ha risolto il problema.

Esistono soluzioni alternative? Il tuo consiglio è molto apprezzato.

Modifica: il file filmato è memorizzato come risorsa statica e ho provato ad accedervi direttamente (non ha utilizzato il tag video).

[Informazioni sulla versione]

  • OS: Ubuntu 12.04 LTE
  • Browser: Chrome 19.0.1084.46, Firefox 12.0
  • GAE: Python - 1.6.5,
  • Python: 2.7.3

[registro errori]

INFO  2012-05-21 07:35:04,575 dev_appserver.py:2891] "GET /static/test.mp4 HTTP/1.1" 200 - 
---------------------------------------- 
Exception happened during processing of request from ('127.0.0.1', 36240) 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/SocketServer.py", line 284, in _handle_request_noblock 
    self.process_request(request, client_address) 
    File "/usr/lib/python2.7/SocketServer.py", line 310, in process_request 
    self.finish_request(request, client_address) 
    File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request 
    self.RequestHandlerClass(request, client_address, self) 
    File "/home/chikashi/Development/google_appengine/google/appengine/tools/dev_appserver.py", line 2579, in __init__ 
    BaseHTTPServer.BaseHTTPRequestHandler.__init__(self, *args, **kwargs) 
    File "/usr/lib/python2.7/SocketServer.py", line 640, in __init__ 
    self.finish() 
    File "/usr/lib/python2.7/SocketServer.py", line 693, in finish 
    self.wfile.flush() 
    File "/usr/lib/python2.7/socket.py", line 303, in flush 
    self._sock.sendall(view[write_offset:write_offset+buffer_size]) 
error: [Errno 32] Broken pipe 
---------------------------------------- 
+0

Puoi mostrarci il tuo codice sorgente? Stai usando blobstoredownloadhandler? –

+0

Ci scusiamo per la mancanza di informazioni. Il file filmato è memorizzato come risorsa statica, quindi non sto utilizzando il comando blobstoreddownloadhandler. –

+0

Sì, dev_appserver.py è a thread singolo. – allyourcode

risposta

1

Qualsiasi cosa che sia un'operazione molto lunga (come la pubblicazione di un film) legherà una discussione fino al suo completamento. Poiché il server di sviluppo è a thread singolo, il suo unico thread di lavoro dovrà attendere fino al termine del download prima di poter servire la richiesta successiva.

In ogni caso, l'ambiente di produzione App Engine non presenta questo problema e servirà felicemente il file, purché non sia troppo grande (non ricordo il limite).

Si può anche considerare di servire il file film da un altro server. A seconda dell'ampiezza di banda che usi, ci sono soluzioni di hosting più economiche rispetto a App Engine (anche se nessuno è così bello come il loro ;-))

+0

Grazie per la risposta, rbanffy! Vorrei chiarire che Google Chrome e Firefox (ho provato su di essi) scaricano il film usando la connessione multipla? Nel mio caso di test, questi browser devono solo scaricare il file del film (URL specificato per il filmato). Pertanto, potrebbe non essere necessario utilizzare la connessione multipla, immagino. Apprezzo davvero il tuo aiuto !! –

+1

La dimensione massima del file è 1 MB – Bobby

Problemi correlati