Дизайн приложения - Daemon с интерфейсом веб-страницы
Вопрос
У меня есть приложение, которое сканирует входной каталог каждые пять секунд, и когда задание (т.е.file) помещается в каталог, который приложение считывает, обрабатывает и выводит другой файл (ы) в выходной каталог.
Мой вопрос в том, если бы я хотел разместить веб-интерфейс в этом приложении, как бы я дождался завершения обработки?
- Пользователь отправляет задание
- задание помещается во входной каталог
- ......Что я делаю на этой веб-странице здесь?
- происходит обработка
- генерируется выходной файл
- ...... Как мне узнать, что задание завершено?
Два решения, которые я предложил, были:
- опрашивать выходной каталог каждые x секунд с веб-страницы
- используйте ajax для опроса веб-сервиса или веб-страницы, которая сообщает, присутствует ли выходной файл
Есть ли лучший дизайн для сервера?Другими словами, как TCP или Именованные каналы помогли бы в этой ситуации?(Невозможно использовать удаленное подключение из-за объекта DCOM.)
Решение
Решение, которое мы реализовывали коммерчески в прошлом, в основном заключается в том, что демон записывает в журнал (обычно DB) информацию о том, что он делает, с отметкой даты / времени, а веб-интерфейс просто показывает последнее количество записей из журнала X с небольшим переключением, чтобы скрыть все сообщения "Просмотрен в каталоге, файл не найден", работал довольно хорошо, позже мы обновили его с помощью AJAX (таймер, который перезагружается каждые 20 секунд).
Другие советы
Я не думаю, что именованные каналы упростят автоматический опрос веб-клиента, но это может позволить серверу лучше уведомлять другой процесс о завершении преобразования - и, в конечном счете, ставить сообщение в очередь веб-браузера.
Вы можете попробовать проводить опрос веб-клиента каждые несколько секунд, чтобы узнать, завершен ли процесс обработки файла, в качестве альтернативы вы могли бы использовать что-то вроде команд Juggernaut "push" на страницу.Juggernaut работает с использованием Flash для открытия сокета в веб-браузере, который постоянно передает JavaScript с сервера.Это может быть ответственно за отправку команды для предупреждения браузера о завершении работы с файлом, а затем за перенаправление.