2016-11-22 8 views

答えて

7

少なくともKituraでは、特別な機能は提供していません。

あなたが使用できると考えることの1つは、午前3時にデータベースを毎日削除する例のDispatchです。いくつかのコードをある間隔で1回または繰り返し送信するDispatchSourceTimerを作成できます。

DispatchSourceTimer.scheduleOneshot(deadline: DispatchTimer, leeway: DispatchTimeInterval) 
DispatchSourceTimer.scheduleRepeating(deadline: DispatchTime, interval: DispatchTimeInterval, leeway: DispatchTimeInterval) 
+0

ありがとうございました!これはmacOS上でうまく動作します。しかし、私は のようなエラーを受け取っています。エラー:宣言されていないタイプの 'DispatchSourceTimer'の使用は、Herokuにデプロイするときに です。 Heroku/UnixでDispatchを動作させるために、いくつかのやり方がありますか? – basedgod

+1

気にしない、私は 'ディスパッチ'をインポートしなければならなかった:-) – basedgod

+0

素晴らしい!それはあなたのために働いてうれしい。発送は非常に便利な図書館です。 –

0

この問題は、アクションをトリガーするエンドポイントを追加することで解決しました。次に、適切な時にエンドポイントにヒットするようにカールコマンドをトリガするcronタスクがあります。

これは、nginxを介して外部とのすべての通信をプロキシすることで保護され、nginxの設定でこのエンドポイントをブロックするだけです。 Swiftベースのサーバーアプリケーションは、curlコマンドで動作し、nginxにフィードするローカルホストに対してのみ機能しますが、サーバー外のものはブロックされます。

0

それはので、ここで私が持っているものだが、この作業を取得するためにいつか連れて行ってくれました:

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() 

は、これは少し面倒です。アイデアは大歓迎です。

+0

実際、最後の数行は 'timer.scheduleOneshot(deadline:.now()+ 5)'と 'timer.activate()'の後に単純化することができます。 –

関連する問題