Запланированные задачи в 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, но заблокировано для всего, что находится за пределами сервера.

Другие вопросы по тегам