Как выполнять функцию каждые n часов на сервере Swift?

Я ищу Swift-аналог Celery от Django, который позволяет функции выполнять каждый заданный промежуток времени.

Мне нужно решение, которое работает на стороне сервера Swift, то есть не все Foundation доступны, и что-то не для iOS / Mac.

Я использую фреймворк Vapor.


person Berry    schedule 10.08.2017    source источник
comment
Я ответил на этот вопрос здесь с фрагментом кода   -  person Kerusan    schedule 05.04.2019


Ответы (1)


У вас есть три основных варианта.

Для таймера, управляемого в вашем серверном приложении (т.е. перезапуск сервера сбрасывает ваши таймеры), вы можете использовать Dispatch:

import Dispatch
let timer = DispatchSource.makeTimerSource()
timer.setEventHandler() {
  // task
}
timer.scheduleRepeating(deadline: .now() + .seconds(3600), interval: .seconds(3600), leeway: .seconds(60))
timer.activate()

Точно так же вы можете использовать сторонний пакет Jobs, созданный участником Vapor:

import Jobs
Jobs.add(interval: .hours(1)) {
  // task
}

Если вы хотите, чтобы функция запускалась в определенное время дня, независимо от времени безотказной работы вашего сервера, ничто не мешает cron (или его родственникам). Ваша задача cron должна либо вызывать команду Vapor в двоичном файле, либо обращаться по защищенному URL-адресу. -маршрут с curl.

person tobygriffin    schedule 10.08.2017
comment
ты знаешь, как это сделать в паре 3? - person Nevin Jethmalani; 13.06.2018
comment
@NevinJethmalani Два верхних варианта не зависят от конкретной версии Vapor и должны работать. - person tobygriffin; 20.06.2018
comment
Вакансии выглядит интересно. Меня беспокоит то, что он не получал обновлений в течение 2 лет. - person Chris Prince; 10.09.2020
comment
Пакет Jobs хоть и немного устарел, но все же отлично работает на Vapor 4. - person Farini; 25.03.2021