#web-applications
#веб-приложения
Вопрос:
Я даже не совсем уверен, как задать этот вопрос, поскольку это своего рода общая концептуальная проблема, но я решил, что попробую.
Я пытаюсь создать процесс, концептуально аналогичный многим веб-сайтам видеохостинга, таким как Vimeo. Используя Vimeo в качестве примера, пользователь загружает видео на главный сервер, видео добавляется в очередь обработки, и пользователь может свободно выполнять другие действия во время обработки видео. Некоторое время спустя пользователь получает электронное письмо, в котором говорится, что обработка завершена, и теперь можно получить доступ к видео, и пользователь может делать с ним все, что захочет.
Мой вопрос заключается в следующем, как работает подобная система? Мой опыт в основном связан с PHP, где вся обработка привязана непосредственно к коду на этой странице (или через includes). Как вы справляетесь с подобными вещами при обработке, когда пользователь переходит со страницы?
Это мое предположение… Пожалуйста, поправьте меня. Страница, отправленная пользователем, добавляет их файл в очередь программного обеспечения для обработки через какой-либо API-интерфейс. Процессор, который, вероятно, написан на каком-то другом языке, таком как C или Java или что-то еще, делает свое дело, а затем, когда он закончен, он запускает вызов на какой-то странице PHP, которая затем отправляет пользователю электронное письмо и делает все, что нужно сделать с видео.
Думаю, я просто пытаюсь понять, как работают «черные ящики» некоторых крупных веб-сайтов, по крайней мере концептуально. Кто-нибудь может мне здесь помочь? Извините, это такой большой, расплывчатый вопрос.
Ответ №1:
Одним из решений вашего вопроса было бы запустить новый процесс fork, который обрабатывает обработку видео и отправку рассылки пользователю, а затем основной процесс просто продолжается как обычно. Это предотвратит остановку основного процесса и заставит пользователя ждать завершения обработки.
Вы можете прочитать о создании форков процесса в php здесь: http://php.net/manual/en/book.pcntl.php
Затем есть приложения, которые управляют обработкой видео, такие как ffmpeg:http://www.ffmpeg.org /
Вместо того, чтобы использовать новый язык программирования, вы просто запускаете cli-приложение, такое как ffmpeg, используя функцию exec: http://php.net/manual/en/function.exec.php
Вам нужно найти способ ставить процессы в очередь, чтобы сервер не перегружался. Возможно, должна быть какая-то функциональность, которая проверяет базу данных на наличие активных процессов и ожидает, пока в таблице будет меньше активных процессов, чем разрешено.
Комментарии:
1. Отлично. Это звучит именно так, как я ищу. На самом деле я просмотрел ffmpeg и imagemagick и, вероятно, в конечном итоге буду использовать оба, поскольку я хочу иметь возможность обрабатывать как видео, так и кадры. Хорошо, пора взглянуть на форки процессов. Большое спасибо!