Что мне делать, если я хочу использовать нативный код для анализа в веб-приложении? - PullRequest
1 голос
/ 22 ноября 2010

Вот проблема ... Я хочу, чтобы пользователь загрузил фотографию, и после того, как пользователь загрузил фотографию, у меня будут некоторые процессы, для анализа, какого цвета эти фотографии.Но я не хочу делать это на php ... ... потому что у меня есть программа на C, которая может работать быстрее.Кроме того, я не хочу, чтобы пользователь ждал результата.Я сообщу пользователю, когда компьютер проанализирует его, и получу результат, которого хочет пользователь.Как я могу это реализовать?какие-либо идеи или предложения?Спасибо.

Моя идея на этот счет:

  1. Записать запись в базу данных, когда пользователь, успешно загрузивший файл, например file001.jpg, также создаст состояние, например, статус: анализ
  2. Программа на C всегда проверяет наличие новой загрузки из базы данных
  3. Если есть новая загрузка, получите файл001.jpg
  4. После завершения программы на Cанализ, измените статус в базе данных, например: finish
  5. Программа php, использующая ajax, продолжает тянуть базу данных, проверяя статус, если статус изменился на «финиш», подскажите и сообщите пользователю.

Что вы думаете об этой реализации?

Ответы [ 3 ]

0 голосов
/ 22 ноября 2010

Если вы не хотите использовать ImageMagick или GD, что вы действительно можете, если эти фотографии ОГРОМНЫ, вы на правильном пути.Если программа на C достаточно быстрая, вы можете сделать так, как говорит Пекка, и использовать exec (), чтобы сразу запустить прогу C в начальном потоке.

Недавно я только что сделал это, проверив фото на наличие-все цвета для использования в фото-мозаике.Мы сделали это с GD, и это было довольно просто.Мы сократили изображение до 1 пикселя с повторной выборкой, а затем взяли цвет из этого.Не на 100% идеально, но довольно хорошо для того, для чего мы его используем.

0 голосов
/ 22 ноября 2010

Gearman [http://gearman.org/] может быть вам полезен.

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

Поддерживает C и PHP, среди других языков.Вы можете написать свой сценарий обработки фотографий на языке C в качестве работника Gearman.Когда PHP получает загруженный файл, вы можете указать демону Gearman обработать вашу фотографию.Затем демон Gearman выберет доступного работника для выполнения работы и уведомит вас, когда вы завершите работу.

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

0 голосов
/ 22 ноября 2010

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

Анализ должен выполняться как демон, который работает непрерывно, или, возможно, как задание cron, которое запускается каждые x минут / секунд. Через заданный интервал он просматривает очередь заданий, чтобы увидеть, есть ли работа, которую нужно выполнить, если она есть, то она обрабатывает ее. По завершении ваш демон обновляет базу данных, чтобы пометить задание как выполненное, и, возможно, записывает новые данные, относящиеся к анализу, в другую таблицу.

Не забывайте, что если у вас есть несколько демонов обработки в фоновом режиме, вам также необходимо пометить задание как «запущенное», чтобы второй процесс не заканчивался дублированием работы.

Когда пользователь возвращается на страницу, отображается новый статус. Это может быть выполнено «вживую» с помощью Ajax-опроса, как вы предлагаете, или вы можете посмотреть, как сохранить живое соединение открытым, используя подход Comet (http://en.wikipedia.org/wiki/Comet_%28programming%29).

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