Django + Coffescript: видео приложение в реальном времени с сокетами io - PullRequest
3 голосов
/ 22 ноября 2011

Я пытался решить эту проблему в течение 2 недель, и я не смог найти решение.Вот что я пытаюсь сделать:

Мне нужно веб-приложение, в которое пользователи могут загружать видео;видео будет трансформировано с использованием Python API opencv.Поскольку у меня есть Python API для opencv, я решил создать веб-приложение, используя Django.С этим все в порядке.

Проблема в том, что преобразование видео является очень длительным процессом, поэтому я пытался реализовать некоторые возможности реального времени, чтобы показать пользователю видео в том виде, в каком оно преобразовано, в другихсловами, я трансформирую кадр и сразу показываю его пользователю.Я пытаюсь сделать это с CoffeScript и сокетами io, следуя некоторым примерам;Однако я не был успешным.

Мой вопрос;Каков был бы правильный подход для добавления возможностей реального времени в приложение Django?

Ответы [ 2 ]

2 голосов
/ 22 ноября 2011

Я бы порекомендовал использовать не-django сервис для обработки веб-сокетов.Правильная настройка веб-сокетов сложна как на стороне клиента, так и на стороне сервера.Посмотрите на pusher.com бесплатное / дешевое решение, которое просто сработает и избавит вас от многих хлопот.

Первоначальный запрос на начало рендеринга должен запустить долгоживущий процесс.и вернитесь с идентификатором, который используется для прослушивания обновлений веб-сокета.

После настройки веб-сокетов вы можете отправлять клиенту сообщения о каждом готовом кадре.Лично я бы не пытался протолкнуть весь фрейм вниз через веб-сокет, а просто отправить сообщение о том, что фрейм завершен с URL-адресом, чтобы получить фрейм.Затем обычный HTTP с его кешированием и тонкостью браузера перемещает большие данные.

Вы определенно не выбираете легкий путь.Легкий путь состоит в том, чтобы ваша долгоживущая задача рендеринга обновила состояние рендеринга в базе данных и провела опрос клиента.Дополнительная загрузка сервера, но намного проще.

1 голос
/ 22 ноября 2011

Сам Django действительно сосредоточен на создании одного вида веб-интерфейса, который следует шаблону HTTP Request / Response.Чтобы поддерживать постоянное соединение с клиентами, которое socket.io действительно упрощает, вам нужно немного отличаться от обычной установки Django.

  1. В этой статье обсуждаетсяпроблема работы в реальном времени с Django, с помощью Orbited и Twisted.Он довольно старый и опирается на Comet, который в наши дни не является предпочтительным способом работы в реальном времени.

  2. Вы можете получить большую выгоду, перейдя на Socket.io на клиенте и что-то вроде Торнадо ( вики * 1016)*) + Клиент Tornado для Socket.io .Но, если вы действительно хотите придерживаться Django для веб-разработки (которую также предлагает Tornado), вам нужно будет заставить их работать вместе внутри каждого, каждый обрабатывая свой конкретный вариант использования.

  3. Наконец, В этой другой статье обсуждается, как заставить Django работать с gevent (сетевая библиотека на основе сопрограмм для Python) и Socket.io, которые в противном случае могли бы стать вашим лучшим вариантом.

Не стесняйтесь оставлять вопросы / комментарии по мере их появления!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...