さて、私はいくつかのコードを注意深く見て、私が物事を完全に考えすぎていることに気づいた後、それを機能させました。プロトコルは実際には非常に単純で、RPCは非常に単純です。
サーバー側の挿入遅延を完全に回避したことを報告できてうれしいです(手動のMongo挿入はクライアントのポーリング/更新に数秒かかりました)。
DDPを実行すると、Meteorで知り、愛するようになったすべてのリアルタイム(っぽい)の良さが得られます:)
後世のために、そしてうまくいけば他の人々を興味深いユースケースに駆り立てるのを助けるために、ここにセットアップがあります。
使用事例
いくつかのカスタムsyslogデータをnode.jsデーモンにスプールしています。次に、このデーモンはデータを解析してMongoに挿入します。アイデアは、私の最初のMeteor実験のために、リアルタイムのブラウザベースのレポートプロジェクトを考え出すことでした。
すべてうまくいきましたが、Meteorの外部でMongoに挿入していたため、クライアントは約10秒ごとにポーリングする必要がありました。別のSO投稿で、 @ TimDogは、これについてDDPを検討することを提案しましたが、彼の提案は完全に機能したようです。
システムでテストしたところ、node.js非同期アプリケーションを介してすべてのMeteorクライアントを即座に更新できるようになりました。
セットアップ
ここでの基本的な考え方は、DDPの「呼び出し」メソッドを使用することです。パラメータのリストを取ります。Meteorサーバー側では、Meteorメソッドをエクスポートしてこれらを使用し、MongoDB挿入を実行します。それは実際には本当に簡単です:
ステップ1:npm install ddp
ステップ2:Meteorサーバーコードに移動し、Meteor.methods内で次のような操作を行います。
Meteor.methods({
'push': function(k,v) { // k,v will be passed in from the DDP client.
console.log("got a push request")
var d = {};
d[k] = parseInt(v);
Counts.insert(d, function(err,result){ // Now, simply use your Collection object to insert.
if(!err){
return result
}else{
return(err)
}
});
}
});
これで、クライアントライブラリを使用して、node.jsサーバーからこのリモートメソッドを呼び出すだけで済みます。これは、基本的にexample.js呼び出しからの直接コピーである呼び出し例であり、エクスポートしたばかりの新しい「push」メソッドをフックするために少し調整されています。
ddpclient.call('push', ['hits', '1111'], function(err, result) {
console.log('called function, result: ' + result);
})
このコードを実行すると、Meteorサーバーを介して挿入され、Meteorサーバーが接続されているクライアントを即座に更新します:)
上記の私のコードは完璧ではないと確信しているので、提案をしてください。私はこのエコシステム全体にかなり慣れていないので、ここで学ぶ機会はたくさんあります。しかし、これが一部の人々の時間を少し節約するのに役立つことを願っています。さて、私のテンプレートをこのすべてのリアルタイムデータで輝かせることに焦点を当てることに戻りましょう:)