2013-03-14 9 views
19

Meteorアプリのバックグラウンドで(一部のページを削るなど)、クライアントに依存しない通常のタスクを実行したいと考えています。だから、彼らはクライアントのスレッドの中にすべきではありませんが、一度終了したら、私はすべてのクライアントを情報で更新したいと思います。これを達成する最良の方法は何ですか?Meteorでクライアントと接続していないバックグラウンドタスク

+0

流星の「クライアント・スレッド」、逆に、より伝統的な解決策のようなものはありませんので、予めご了承ください。クライアント要求はマルチスレッドではなく非同期に処理されます。 –

+0

あなたは正しいです。それらは繊維であり、協力的なマルチタスキングです。 – Mitar

答えて

5

任意の外部プロセスがMeteorクライアントを更新できるようにするには、Meteorに関連付けられているDDPプロトコルを使用します。サーバープロセスはDDPチャネルに書き込むことができ、クライアントが更新するとクライアントが更新されます。例えば、この記事を見て、あなたに類似していてもよいユースケースを、持っている:

Using node ddp-client to insert into a meteor collection from Node

プロトコルはかなり簡単です、そしてポストはNode.jsのプロセスの書き込みの一例を示していますリアルタイムでクライアントを更新するMongoコレクションに追加します。以下のため

+0

ええと、あなたはこの質問にリンクしていますか? – Mitar

+0

ガー - それについて申し訳ありません。ただ修正しました。 – mcauth

+0

興味深いアプローチ。 – Mitar

6

サーバー側コードで実行してください。定期的に毎日何かのタイムアウトタスクがある場合:

トムコールマンのcronパッケージであるcronジョブを使用することができます:https://github.com/tmeasday/meteor-cron

あなたがmeteorite package manager firstインストールする必要があります:npm install meteorite -gをして、プロジェクトでのcronパッケージをインストールディレクトリmrt add cron-tick

サーバーのjsとすぐに、あなたの更新/挿入を実行するよう

var MyCron = new Cron(); 

// this job will happen every day (60 seconds * 60 * 24) 
MyCron.addJob(60*60*24, function() { 
    //Scrape your stuff 

    //Update your collections 
}); 

/編集すると、すべてのクライアントにプッシュされます。

+0

コレクションに基づいていない(データベースの何かに基づいていない)クライアントに何かをプッシュする方法はありますか?何かが行われたばかりの情報のように?通知? – Mitar

+1

どのスレッドでこのcronジョブが実行されますか? – Mitar

+1

それより少しトリッキーなので、nodeのjavascriptは単一のスレッドになりますので、これがFibersが入る場所です。cronのMeteor.callを流星に使用するとします。'this.unblock'を含むあなたのタスクで' this.unblock'のメソッドの内容は新しいファイバーで実行され、他のクライアントをブロックしません。 流星が送ることができる他のものについては、私は部屋の収集によってカウントをお勧めします:http://stackoverflow.com/questions/10565654/how-does-the-messages-count-example-in-meteor-docs-work開始するには良い場所、それは正確にあなたが送信したいものに依存します。 – Akshat

1

サーバー上でMeteor.setInterval(おそらくMeteor.startup)を呼び出してみることができます。それはうまくいくはずですが、cronのソリューションほど柔軟ではないかもしれません。

+1

私は独立したプロセスを持つことができ、複数のサーバーに分割することもできます。だから、実際には、労働者のマシンで重い持ち上げ。 – Mitar

0

http://atmospherejs.comに移動し、検索cron

私が見つけた最高の一つはpercolate:synced-cron

インストール

meteor add percolate:synced-cron

基本

です3210
SyncedCron.add({ 
    name: 'Crunch some important numbers for the marketing department', 
    schedule: function(parser) { 
    // parser is a later.parse object 
    return parser.text('every 2 hours'); 
    }, 
    job: function() { 
    var numbersCrunched = CrushSomeNumbers(); 
    return numbersCrunched; 
    } 
}); 

SyncedCron.start(); 

高度

See their documentation

関連する問題