2012-05-21 7 views
5

Estoy intentando publicar mp4/video en el entorno de desarrollo de GAE python (usando dev_appserver.py), pero hasta ahora no pude reproducirlo en mi navegador.¿Cómo puedo servir un archivo de película del servidor de desarrollo (dev_appserver.py) de GAE Python?

Como ocurrió el error "Broken Pipe" en el servidor de desarrollo y pude reproducirlo en el entorno de producción (en el servidor de Google), el problema puede deberse a las solicitudes paralelas del navegador. (Si mi comprensión es correcta, dev_appserver.py es de un único subproceso y no puede manejar solicitudes paralelas.)

Intenté la opción '--disable-preconnect' de Chrome, pero no resolvió el problema.

¿Hay alguna solución para esto? Su consejo es muy apreciado.

Editar: El archivo de película se almacena como un recurso estático, y traté de acceder directamente (no usé la etiqueta de video).

[Información de la versión]

  • OS: Ubuntu 12.04 LTE
  • navegador: Chrome 19.0.1084.46, Firefox 12.0
  • GAE: Pitón - 1.6.5,
  • Python: 2.7.3

[Log Error]

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

¿Puede mostrarnos su código fuente? ¿Estás usando blobstoredownloadhandler? –

+0

Disculpe la escasez de información. El archivo de película se almacena como un recurso estático, por lo que no estoy usando blobstoreddownloadhandler. –

+0

Sí, dev_appserver.py tiene un único subproceso. – allyourcode

Respuesta

1

Cualquier cosa que sea una operación muy larga (como servir una película) atará un hilo hasta que se complete. Como el servidor de desarrollo tiene un único subproceso, su único subproceso de trabajo tendrá que esperar hasta que finalice la descarga antes de que pueda servir la siguiente solicitud.

En cualquier caso, el entorno de producción de App Engine no tiene este problema y le servirá felizmente su archivo, siempre que no sea demasiado grande (no recuerdo el límite).

También puede considerar la publicación del archivo de película desde otro servidor. Dependiendo del ancho de banda que use, hay soluciones de hosting más económicas que App Engine (incluso si ninguna es tan buena como la suya ;-))

+0

¡Gracias por la respuesta, rbanffy! Me gustaría aclarar que Google Chrome y Firefox (probé en ellos) descargan la película usando la conexión múltiple. En mi caso de prueba, estos navegadores solo necesitan descargar el archivo de película (URL especificada para el archivo de película). Por lo tanto, puede que no necesite usar conexión múltiple, supongo. ¡Realmente aprecio tu ayuda! –

+1

El tamaño máximo de archivo es 1 MB – Bobby

Cuestiones relacionadas