2012-05-21 15 views
5

Próbuję służyć mp4/wideo w środowisku rozwojowym python GAE (przy użyciu dev_appserver.py), ale nie byłem w stanie odtworzyć go w mojej przeglądarce do tej pory.Jak mogę przesłać plik filmowy z serwera deweloperskiego (dev_appserver.py) z GAE Python?

Ponieważ na serwerze programowania wystąpił błąd "Broken Pipe" i mogłem odtworzyć go w środowisku produkcyjnym (na serwerze Google), przyczyną problemu mogą być równoległe żądania przeglądarki. (Jeśli moje zrozumienie jest poprawne, dev_appserver.py jest jednowątkowe i nie może obsłużyć równoległych żądań.)

Próbowałem "--disable-preconnect" opcji Chrome, ale to nie rozwiązało problemu.

Czy są jakieś obejścia tego problemu? Twoja rada jest naprawdę doceniana.

Edytuj: Plik filmu jest przechowywany jako zasób statyczny i próbowałem uzyskać do niego bezpośredni dostęp (nie użyłem tagu wideo).

[Informacje o wersji]

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

[błąd Log]

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

Czy możesz pokazać nam swój kod źródłowy? Czy używasz blobstoredownloadhandler? –

+0

Przepraszamy za niedobór informacji. Plik filmowy jest przechowywany jako zasób statyczny, więc nie używam narzędzia blobstoreddownloadhandler. –

+0

Tak, dev_appserver.py jest jednowątkowe. – allyourcode

Odpowiedz

1

Wszystko, co jest bardzo długą operacją (np. Serwowaniem filmu), spowoduje związanie wątku do momentu jego zakończenia. Ponieważ serwer programistyczny jest jednowątkowy, jego jedyny wątek roboczy będzie musiał poczekać, aż pobieranie zakończy się, zanim będzie mogło obsłużyć następne żądanie.

W każdym razie, środowisko App Engine Produkcji nie ma tego problemu i z przyjemnością obsłuży Twój plik, o ile nie jest zbyt duży (nie pamiętam limitu).

Możesz również rozważyć udostępnienie pliku filmu z innego serwera. W zależności od przepustowości, której używasz, istnieją tańsze rozwiązania hostingowe niż App Engine (nawet jeśli żadna nie jest tak fajna jak ich ;-))

+0

Dziękuję za odpowiedź, rbanffy! Chciałbym wyjaśnić, że Google Chrome i Firefox (testowałem na nich) pobierają film za pomocą połączenia wielodostępnego? W moim przypadku testowym te przeglądarki muszą jedynie pobrać plik filmu (określony adres URL pliku filmu). Dlatego może nie być konieczne użycie połączenia wielozakresowego. Naprawdę doceniam twoją pomoc! –

+1

Maksymalny rozmiar pliku to 1 MB – Bobby

Powiązane problemy