我可以在Vapor(服务器端Swift)中使用计时器,例如 TableLayout.LayoutParams layoutParams = new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT, TableLayout.LayoutParams.WRAP_CONTENT);
TableRow.LayoutParams tvParams = new TableRow.LayoutParams(
MATCH_PARENT,
MATCH_PARENT,
0.33f);
row.setLayoutParams(layoutParams);
吗?
我希望用Vapor编写的服务器可以偶尔主动执行一些任务。例如,每隔15分钟从网上轮询一些数据。
如何使用Vapor实现这一目标?
答案 0 :(得分:6)
如果您可以接受在重新创建服务器实例时重新设置任务计时器,并且您只有一个服务器实例,那么您应该考虑优秀的Jobs库。
如果您无论服务器进程如何都需要您的任务完全同时运行,请使用cron
或类似方式安排Command。
答案 1 :(得分:1)
如果您只需要触发一个简单的计时器,则可以使用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")
}
}