Meteor メソッドの呼び出しは、クライアントにポストされた順序どおりにサーバー上で実行されると想定できますか? 言い換えれば、Meteor メソッドは因果関係を維持するのでしょうか?
編集:答えが何であれ、見落としていない限り、これはおそらくドキュメントに記載する必要があります。
Meteor メソッドの呼び出しは、クライアントにポストされた順序どおりにサーバー上で実行されると想定できますか? 言い換えれば、Meteor メソッドは因果関係を維持するのでしょうか?
編集:答えが何であれ、見落としていない限り、これはおそらくドキュメントに記載する必要があります。
注:以下は正しいと思いましたが、コードでまだ確認できていません。メテオ コア グループからもう少し情報を入手したいと思います。
とはいえ、これらは私の当初の考えでした:
を使用せずにサーバーでメソッドを呼び出すthis.unblock
と、関数は同期的に実行されるため、他のすべてのサーバー側呼び出しがブロックされます。これは、呼び出しの順序を保証できる唯一のシナリオです。ドキュメントは良い概要を提供します。Meteor.method
そうしないと、 withthis.unblock
メソッドがサーバー上で非同期に実行されるため、順序が保証されません。
しかし、私は自分のコードでこれをまだ確認していません。this.unblock
サーバー側のコードに関係なく、コンソールは最初から 2 番目から 3 番目の順序でメッセージをログに記録します。サーバー上では、1 番目 - 3 番目 - 2 番目の順序になると予想されます。
if (Meteor.isServer) {
Meteor.methods({
first: function() {
console.log("server first");
return "right away";
},
second: function () {
this.unblock();
for(var i = 0; i < 10000000; i++) {}
console.log("server second");
return "second one";
},
third: function () {
console.log("server third");
return "last";
},
});
}
if (Meteor.isClient) {
Meteor.startup(function() {
Meteor.call("first", function(error, result) {
console.log("first completed: " + result);
});
Meteor.call("second", function(error, result) {
console.log("second completed: " + result);
});
Meteor.call("third", function (error, result) {
console.log("third completed: " + result);
});
});
}
特定のクライアント/サーバー接続で、サーバーはクライアントからのメッセージ (メソッド呼び出し、sub/unsub 要求など) を順番に処理します。サーバーは、次の 2 つのいずれかが発生するまで、メッセージ N+1 の処理を開始しません。
this.unblock
。(たとえば、複数の subscribe メソッドを並行して処理できるように、将来これらの制限を緩和することを想像することができます。)