В основе любого веб-приложения лежит взаимодействие с клиентами. Каждое клиентское действие вызывает определенную реакцию сервера. Например, команда на создание объекта добавляет запись в базу данных.
Но иногда требуется произвести действия без участия пользователя. Например, выполнить оптимизацию или резервное копирование текущих данных. Для этого в декларативном фреймворке Evado имеется компонент «Планировщик», который запускает в назначенное время задачи, выполняющие определенную работу.
Компонент приложения - это экземпляр класса, существующий в течении работы приложения. Компоненты реализуют специфический функционал.
По умолчанию планировщик работает с интервалом 60 секунд. Это определяет минимальный период запуска задач. Даже, если у задачи будет указана меньший период, планировщик запустит ее только после минимального интервала. Вы может изменить это значение в конфигурации компонента с помощью параметра refreshInterval (см. статью «Нюансы конфигурирования веб-приложения»).
Пример использования
Рассмотрим конкретный пример использования планировщика. При асинхронной загрузке пользователи могут отправлять файлы на сервер до сохранения объекта (подробнее смотри про загрузку файлов во фреймворке Evado). В случае, если сохранение не произойдёт, то такие файлы, так и останутся невостребованными.
Для очистки хранилища имеется задача deleteExpiredFiles, которая запускается через каждые два часа и выполняет работу по удалению неиспользуемых файлов с истёкшим сроком хранения - component/job/DeleteExpiredFiles.
Вы заметили, что если пользователь загрузит файл и надолго задержится на форме редактирования, то при сохранения объекта этот файл уже будет удален...
Управление задачами
Управление задачами осуществляется через унифицированный интерфейс модуля «Администрирование».
Планировщик может запускать задачу однократно или периодически, с заданным числом повторений или без ограничений, при старте сервера или в определенную дату. В случае, если при выполнении работы произошла ошибка, то задача может быть либо остановлена, либо снова запущена в следующий раз.
В меню «Задачи», на верхней панели, находится кнопка принудительного обновления планировщика для запуска актуальных задач.
При необходимости задачу можно запустить в ручном режиме, непосредственно с формы редактирования. Это доступно, в том числе, и для неактивных задач, которые игнорируются планировщиком при обновлении.
Выполняемая работа
Работа, выполняемая задачей, это простой JavaScript класс, реализующий метод execute, в котором производятся необходимые действия. При запуске задачи создается экземпляр работы и вызывается метод execute.
Одна и та же работа может быть использована в нескольких задачах. Параметры передаются через конфигурацию создания экземпляра - {"Class":"component/job/MyJob", "myParam":"myValue"}.
Заключение
Демонстрацию возможностей декларативного фреймворка Evado, а также примеры готовых веб-приложений можно найти в открытом доступе.