リアルタイム開発フレームワークMeteor API解読シリーズDDP

34125 ワード

前に書いてあると
このブログは主にDDP について
使用するmeteorバージョンは0.8.0 です.
古い話を繰り返し、できるだけ公式文書を主とする本編ブログに不正確な点があるのは避けられないが、発見があれば指摘してほしい.
このブログのアドレス:http://blog.csdn.net/a6383277/article/details/23656929 転載は出典を明記してください、ありがとうございます
DDP
このクラスには方法DDP.connect(url)しかありません.まず、このクラスの役割を見てみましょう.  公式文書はこう述べています.
Connect to the server of a different Meteor application to subscribe to its document sets and invoke its >remote methods.
異なるMeteorアプリケーションに接続してデータセットを購読し、リモートメソッドを呼び出す.これにより、公開されたデータセットサブスクリプションによって独自のアプリケーションを構築することができる.コードで説明します.  今から見れば使用です
DDP.connect(url) @Anywhere
この関数はクライアントまたはサービス側で使用できます.  パラメータurlは、購読する必要がある別のMeteorの接続アドレスです.この関数は、クライアントとサービス側で同時に呼び出せるメソッドではないメソッドを含むオブジェクトを返します.
subscribe -         call -     .  Meteor.call. apply -     . Meteor.apply. methods - Define client-only stubs for methods defined on the remote server. See Meteor.methods. status -       .  Meteor.status. reconnect - Meteor.reconnect. disconnect -  Meteor.disconnect. onReconnect - Set this to a function to be called as the first step of reconnecting. This function can call methods which will be executed before any other outstanding methods. For example, this can be used to re-establish the appropriate authentication context on the new connection.

(ps:http://stackoverflow.com/questions/18358526/connect-two-meteor-applications-using-ddp#)  まずコードを見てください.これは他のmeteorアプリケーションをリンクする必要があるため、2つのmeteorアプリケーションを書く必要があります.リンクされたアプリケーションは名前「main-server」に適用され、アクティブに接続される「deputy-server」
main-server
まずmain-serverのファイル構造を見てみましょう.
- --server     |--main.js

コード#コード#
main.js:
People = new Meteor.Collection("people");//         //        autopublish(   subliscribe),            Meteor.startup(function(){ //           People.remove({}); //   People     collections.js            var peoples = [ {name:" A",address:"  ",phone:"111"}, {name:" B",address:"  ",phone:"222"}, {name:" C",address:"  ",phone:"333"}, {name:" D",address:"  ",phone:"444"}, {name:" E",address:"  ",phone:"555"} ]; for (var i = 0; i < peoples.length; i++) People.insert(peoples[i]); });

コードは簡単です.いくつかのデータを初期化します.
deputy-server
この中にはまずコードは必要ありません.以下shell
meteor create deputy-server cd deputy-server meteor remove autopublish rm *.*

はい、これで基本OKです.  まず3010ポートでmain-serverアプリケーションを起動します.
cd main-server meteor run -p 3010

3000ポートでdeputy-serverを起動します
cd deputy-server meteor

効果をより直感的に見るために、ブラウザコンソールで直接コードを作成します.
localhost:3000のコンソールを開き、
var remote = DDP.connect("http://localhost:3010");

これでリモート接続が得られました.
status
次に入力
remote.status()

出力結果が表示されます.使用はMeteor.status()と一致しますが、接続ステータスが自分のサーバではなくリモートのサーバステータスであることを確認します.似たような方法として、call、apply、reconnect、disconnectは紙面を節約するために余計なことを言わないので、疑問があればブログの下に伝言を残してもいいです.もちろん関連コードは私がやはり出すことができて、最後のダウンロードリンクに行ってソースコードをダウンロードすることができます.
今は主にいくつかの少し異なる関数に重点を置いています.それぞれsubscribe,methods,onReconnectです.
subscribe
これは、リモート・サーバを購読するデータセットです.どのように使用するか、上のコードに続いて、次のコードをコンソールにコピーします.
var People = new Meteor.Collection('people',remote) console.log(EJSON.stringify(People.find().fetch()))

3010アプリケーションのデータがここで印刷されていることがわかります.remote.subscribeを直接使用するのではなく、Metoer.Collection内部でこの関数を呼び出すことができます.ここはカプセル化されています.直接使用すれば、このサブスクリプションデータセットの参照を得ることはできません.これは皆さんが興味があれば自分で試してみてください.具体的なCollectionの説明は次のブログで具体的に説明します.
onReconnect
この関数の呼び出しは、他の方法よりも優先されます.つまり、リモート・サーバに接続した後に実行される最初のステップです.コンソール入力
remote.onReconnect = function(){ console.log(123) }

その後main-serverアプリケーションを再起動し、印刷出力があることを発見します.より多くの実際の応用には自分で探求する必要がある.
methods
公式文書は、Define client-only stubs for methods defined on the remote serverと解釈されています.リモートサーバ上のmethedsに定義されたクライアント・ルートについて、Metor.methodsの具体的な使用について以前のブログで書いたことがありますので、参考にしてください.  翻訳はできません.ここでコードで説明します.
まずmain-server index.js:(最後の数行のコードを追加してmeteors関数セットを定義)
People = new Meteor.Collection("people");//         //        autopublish(   subliscribe),            Meteor.startup(function(){ //           People.remove({}); //   People     collections.js            var peoples = [ {name:" A",address:"  ",phone:"111"}, {name:" B",address:"  ",phone:"222"}, {name:" C",address:"  ",phone:"333"}, {name:" D",address:"  ",phone:"444"}, {name:" E",address:"  ",phone:"555"} ]; for (var i = 0; i < peoples.length; i++) People.insert(peoples[i]); }); Meteor.methods({ "sayHi":function(name){ console.log("Hi"+name); return "I'm server" } });

main-serverを再起動します.(注意3010ポート)
次にdeputy-serverのlocalhost:3000を開きます  次のコードをブラウザコンソールに貼り付けます.
var remote = DDP.connect("http://localhost:3010");//        remote.methods({ "sayHi":function(){ console.log("I'm deputy-server client")} }) //            。 remote.call("sayHi","deputy",function(error,result){console.log(result)}) #      

出力は次のように表示されます.
I'm deputy-server client undefined I'm server

つまり、リモート・メソッドを呼び出すと、ローカル・ルートも実行されます.
その他の方法は、接続中のコードをダウンロードすることを参照してください.
最後に一言
このリモートサーバを購読する関数は、他の人がアプリケーションのデータを購読したくない場合は、Meteor.publishで関連データの制限をしなければならないことに注意してください.
ダウンロードリンク:http://download.csdn.net/detail/a6383277/7194957  あるいは私のgithub:github.com/huyinghuan/lessonの下のMeteor/API-006の下に関連コードを見に行きます.