Запланированные задачи в Server Swift (Kitura, Vapor, Zewo и т. Д.)
Есть ли возможность планирования задач на серверной платформе Swift, предпочтительно Kitura?
Мне нужно планировать задачи; например, стирать базу данных каждый день в 3 часа ночи.
3 ответа
По крайней мере, в Kitura мы не предоставляем специальных функций для этого.
Одна вещь, которую вы можете рассмотреть, это использовать Dispatch, которая очень хорошо подойдет для вашего примера удаления базы данных каждый день в 3 часа ночи. Вы можете создать DispatchSourceTimer, который отправляет некоторый код после некоторого интервала один или несколько раз.
DispatchSourceTimer.scheduleOneshot(deadline: DispatchTimer, leeway: DispatchTimeInterval)
DispatchSourceTimer.scheduleRepeating(deadline: DispatchTime, interval: DispatchTimeInterval, leeway: DispatchTimeInterval)
Мне потребовалось некоторое время, чтобы заставить это работать, вот что я получил:
let timer = DispatchSource.makeTimerSource()
timer.setEventHandler() {
// Coded I want to execute after a delay
}
let now = DispatchTime.now()
let delayInSeconds:UInt64 = 5
let deadline = DispatchTime(uptimeNanoseconds: now.uptimeNanoseconds + delayInSeconds*UInt64(1e9))
timer.scheduleOneshot(deadline: deadline)
timer.activate()
Это немного громоздко. Идеи приветствуются.
Я решил эту проблему, добавив конечную точку, которая запускает действие. Затем у меня есть задача cron, которая запускает команду curl для достижения этой конечной точки в соответствующее время.
Я защищаю это, передавая все коммуникации с внешним миром через nginx, и просто блокирую эту конечную точку в моей конфигурации nginx. Серверное приложение на основе Swift служит только для локального хоста, который работает с командой curl, и для подачи в nginx, но заблокировано для всего, что находится за пределами сервера.