如何在服务器端 swift 每 n 小时执行一次函数?

How to execute a function every n hours in server side swift?

我正在寻找 Django 的 Celery 的 Swift 对应物,它允许函数在每个给定的时间量内执行。

我需要一个在服务器端工作的解决方案 Swift,这意味着并非所有的 Foundation 都可用,而且某些不适用于 iOS / Mac。

我正在使用 Vapor 框架。

您有三个主要选择。

对于在您的服务器应用程序中管理的计时器(即重新启动服务器会重置您的计时器),您可以使用 Dispatch:

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

同样,您可以使用由 Vapor 贡献者创建的第三方 Jobs 软件包:

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

如果您希望函数在一天中的特定时间 运行 独立于服务器的正常运行时间,没有比 cron(或其亲戚)更好的了。您的 cron 作业应该在二进制文件上调用 Vapor Command,或者使用 curl.

访问受保护的 URL-route