Meteorアプリのバックグラウンドで(一部のページを削るなど)、クライアントに依存しない通常のタスクを実行したいと考えています。だから、彼らはクライアントのスレッドの中にすべきではありませんが、一度終了したら、私はすべてのクライアントを情報で更新したいと思います。これを達成する最良の方法は何ですか?Meteorでクライアントと接続していないバックグラウンドタスク
答えて
任意の外部プロセスがMeteorクライアントを更新できるようにするには、Meteorに関連付けられているDDPプロトコルを使用します。サーバープロセスはDDPチャネルに書き込むことができ、クライアントが更新するとクライアントが更新されます。例えば、この記事を見て、あなたに類似していてもよいユースケースを、持っている:
Using node ddp-client to insert into a meteor collection from Node
プロトコルはかなり簡単です、そしてポストはNode.jsのプロセスの書き込みの一例を示していますリアルタイムでクライアントを更新するMongoコレクションに追加します。以下のため
サーバー側コードで実行してください。定期的に毎日何かのタイムアウトタスクがある場合:
トムコールマンの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
});
/編集すると、すべてのクライアントにプッシュされます。
コレクションに基づいていない(データベースの何かに基づいていない)クライアントに何かをプッシュする方法はありますか?何かが行われたばかりの情報のように?通知? – Mitar
どのスレッドでこのcronジョブが実行されますか? – Mitar
それより少しトリッキーなので、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
サーバー上でMeteor.setInterval
(おそらくMeteor.startup
)を呼び出してみることができます。それはうまくいくはずですが、cronのソリューションほど柔軟ではないかもしれません。
私は独立したプロセスを持つことができ、複数のサーバーに分割することもできます。だから、実際には、労働者のマシンで重い持ち上げ。 – Mitar
http://atmospherejs.comに移動し、検索cron
私が見つけた最高の一つはpercolate:synced-cron
インストール
meteor add percolate:synced-cron
基本
です3210SyncedCron.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();
高度
- 1. 単純なクライアントとサーバを接続しているバークレーソケット
- 2. クライアントがMeteorサーバーに接続しているときのみコードを実行しますか?
- 3. Socket.ioクライアントがサーバーに接続していない
- 4. です。サーバーに接続しているクライアント
- 5. レガシーWSEクライアントとWCFサービスの接続...クライアントへの変更なし
- 6. Meteor - 接続された複数のクライアントをアレイからリダイレクトしますか?
- 7. AndroidクライアントとローカルXMPPサーバを接続した後でログインできない
- 8. HTTPクライアント/サーバー、私はBasicResponseHandler()と私のクライアント側の接続を閉じているとは思わない
- 9. 「コネクションレスで接続されていない」接続
- 10. QtクライアントとPHPサーバ接続
- 11. P2P Cirrus接続FlashクライアントとHTMLクライアント
- 12. TCPクライアント接続
- 13. CXF JAXRSクライアントがTCP接続を再利用しない
- 14. Rmiクライアントの接続チェックと接続の再試行ですか?
- 15. libGDXクライアント(サーバー)クライアント接続
- 16. FlashクライアントXMLSocketがサーバーに接続していません
- 17. 接続しているクライアントのリストusername with socket io
- 18. AndroidクライアントがRESTサーバーに接続していません
- 19. Socket.ioで再接続してクライアントIDを維持していますか?
- 20. エンティティフレームワークに接続されていないエンティティを接続する
- 21. JavaでのHTTPクライアント接続
- 22. Node.js:socket.io closeクライアント接続
- 23. javaクライアントとTCP接続を介してC++サーバとの通信
- 24. SignalR OnConnectedが呼び出されていない、.NETクライアントから接続する
- 25. インターネットに接続していないときのjQueryの操作
- 26. インターネットに接続していないとXMLReaderがクラッシュする
- 27. は、socket.ioに接続しているクライアントは、私がNode.jsのをV4.1.1の午前と、クライアントがサーバーソケットとスタートに接続socket.io</p> <p>で作業
- 28. クライアントが接続を終了すると、完了ポートスレッドがリークしています
- 29. jdbc接続プールの共有可能な接続と共有できない接続の違い?
- 30. WMIとPerlを使用してリモートマシンに接続できない
流星の「クライアント・スレッド」、逆に、より伝統的な解決策のようなものはありませんので、予めご了承ください。クライアント要求はマルチスレッドではなく非同期に処理されます。 –
あなたは正しいです。それらは繊維であり、協力的なマルチタスキングです。 – Mitar