サーバーサイドのSwiftフレームワーク、好ましくはKituraでタスクをスケジュールする可能性はありますか?サーバーサイドスウィフト(Kitura、Vapor、Zewoなど)でスケジュールされたタスク
タスクをスケジュールする必要があります。たとえば、データベースを毎日午前3時に拭くことができます。
サーバーサイドのSwiftフレームワーク、好ましくはKituraでタスクをスケジュールする可能性はありますか?サーバーサイドスウィフト(Kitura、Vapor、Zewoなど)でスケジュールされたタスク
タスクをスケジュールする必要があります。たとえば、データベースを毎日午前3時に拭くことができます。
少なくともKituraでは、特別な機能は提供していません。
あなたが使用できると考えることの1つは、午前3時にデータベースを毎日削除する例のDispatchです。いくつかのコードをある間隔で1回または繰り返し送信するDispatchSourceTimerを作成できます。
DispatchSourceTimer.scheduleOneshot(deadline: DispatchTimer, leeway: DispatchTimeInterval)
DispatchSourceTimer.scheduleRepeating(deadline: DispatchTime, interval: DispatchTimeInterval, leeway: DispatchTimeInterval)
この問題は、アクションをトリガーするエンドポイントを追加することで解決しました。次に、適切な時にエンドポイントにヒットするようにカールコマンドをトリガするcronタスクがあります。
これは、nginxを介して外部とのすべての通信をプロキシすることで保護され、nginxの設定でこのエンドポイントをブロックするだけです。 Swiftベースのサーバーアプリケーションは、curlコマンドで動作し、nginxにフィードするローカルホストに対してのみ機能しますが、サーバー外のものはブロックされます。
それはので、ここで私が持っているものだが、この作業を取得するためにいつか連れて行ってくれました:
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()
は、これは少し面倒です。アイデアは大歓迎です。
実際、最後の数行は 'timer.scheduleOneshot(deadline:.now()+ 5)'と 'timer.activate()'の後に単純化することができます。 –
ありがとうございました!これはmacOS上でうまく動作します。しかし、私は のようなエラーを受け取っています。エラー:宣言されていないタイプの 'DispatchSourceTimer'の使用は、Herokuにデプロイするときに です。 Heroku/UnixでDispatchを動作させるために、いくつかのやり方がありますか? – basedgod
気にしない、私は 'ディスパッチ'をインポートしなければならなかった:-) – basedgod
素晴らしい!それはあなたのために働いてうれしい。発送は非常に便利な図書館です。 –