Найти тему
Logonok

Планируем действия без пользователя

Оглавление

В основе любого веб-приложения лежит взаимодействие с клиентами. Каждое клиентское действие вызывает определенную реакцию сервера. Например, команда на создание объекта добавляет запись в базу данных.

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

Компонент приложения - это экземпляр класса, существующий в течении работы приложения. Компоненты реализуют специфический функционал.

По умолчанию планировщик работает с интервалом 60 секунд. Это определяет минимальный период запуска задач. Даже, если у задачи будет указана меньший период, планировщик запустит ее только после минимального интервала. Вы может изменить это значение в конфигурации компонента с помощью параметра refreshInterval (см. статью «Нюансы конфигурирования веб-приложения»).

Пример использования

Рассмотрим конкретный пример использования планировщика. При асинхронной загрузке пользователи могут отправлять файлы на сервер до сохранения объекта (подробнее смотри про загрузку файлов во фреймворке Evado). В случае, если сохранение не произойдёт, то такие файлы, так и останутся невостребованными.

Для очистки хранилища имеется задача deleteExpiredFiles, которая запускается через каждые два часа и выполняет работу по удалению неиспользуемых файлов с истёкшим сроком хранения - component/job/DeleteExpiredFiles.

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

Управление задачами

Управление задачами осуществляется через унифицированный интерфейс модуля «Администрирование».

Задачи описывают что и когда должен запускать планировщик
Задачи описывают что и когда должен запускать планировщик

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

В меню «Задачи», на верхней панели, находится кнопка принудительного обновления планировщика для запуска актуальных задач.

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

Только активные задачи запускаются планировщиком
Только активные задачи запускаются планировщиком

Выполняемая работа

Работа, выполняемая задачей, это простой JavaScript класс, реализующий метод execute, в котором производятся необходимые действия. При запуске задачи создается экземпляр работы и вызывается метод execute.

Одна и та же работа может быть использована в нескольких задачах. Параметры передаются через конфигурацию создания экземпляра - {"Class":"component/job/MyJob", "myParam":"myValue"}.

Заключение

Демонстрацию возможностей декларативного фреймворка Evado, а также примеры готовых веб-приложений можно найти в открытом доступе.