如何在 Vapor 中使用计时器(服务器端 Swift)?
How to use timer in Vapor (server-side Swift)?
我可以在 Vapor(服务器端 Swift)中使用计时器,例如 NSTimer
吗?
我希望我用Vapor写的服务器偶尔能主动做一些任务。例如,每 15 分钟从网络上轮询一些数据。
如何使用 Vapor 实现这一点?
如果您可以接受每当重新创建服务器实例时您的任务计时器为 re-set,并且您只有一个服务器实例,那么您应该考虑出色的 Jobs 库。
如果您需要您的任务完全同时 运行 而不管服务器进程,则使用 cron
或类似的方法来安排 Command.
如果您只需要触发一个简单的计时器,您可以使用 Dispatch
schedule()
函数创建一次或多次。如果需要,您可以暂停、恢复和取消它。
这是一个代码片段:
import Vapor
import Dispatch
/// Controls basic CRUD operations on `Session`s.
final class SessionController {
let timer: DispatchSourceTimer
/// Initialize the controller
init() {
self.timer = DispatchSource.makeTimerSource()
self.startTimer()
print("Timer created")
}
// *** Functions for timer
/// Configure & activate timer
func startTimer() {
timer.setEventHandler() {
self.doTimerJob()
}
timer.schedule(deadline: .now() + .seconds(5), repeating: .seconds(10), leeway: .seconds(10))
if #available(OSX 10.14.3, *) {
timer.activate()
}
}
// *** Functions for cancel old sessions
///Cancel sessions that has timed out
func doTimerJob() {
print("Cancel sessions")
}
}
我可以在 Vapor(服务器端 Swift)中使用计时器,例如 NSTimer
吗?
我希望我用Vapor写的服务器偶尔能主动做一些任务。例如,每 15 分钟从网络上轮询一些数据。
如何使用 Vapor 实现这一点?
如果您可以接受每当重新创建服务器实例时您的任务计时器为 re-set,并且您只有一个服务器实例,那么您应该考虑出色的 Jobs 库。
如果您需要您的任务完全同时 运行 而不管服务器进程,则使用 cron
或类似的方法来安排 Command.
如果您只需要触发一个简单的计时器,您可以使用 Dispatch
schedule()
函数创建一次或多次。如果需要,您可以暂停、恢复和取消它。
这是一个代码片段:
import Vapor
import Dispatch
/// Controls basic CRUD operations on `Session`s.
final class SessionController {
let timer: DispatchSourceTimer
/// Initialize the controller
init() {
self.timer = DispatchSource.makeTimerSource()
self.startTimer()
print("Timer created")
}
// *** Functions for timer
/// Configure & activate timer
func startTimer() {
timer.setEventHandler() {
self.doTimerJob()
}
timer.schedule(deadline: .now() + .seconds(5), repeating: .seconds(10), leeway: .seconds(10))
if #available(OSX 10.14.3, *) {
timer.activate()
}
}
// *** Functions for cancel old sessions
///Cancel sessions that has timed out
func doTimerJob() {
print("Cancel sessions")
}
}