1

Meteor メソッドの呼び出しは、クライアントにポストされた順序どおりにサーバー上で実行されると想定できますか? 言い換えれば、Meteor メソッドは因果関係を維持するのでしょうか?

編集:答えが何であれ、見落としていない限り、これはおそらくドキュメントに記載する必要があります。

4

2 に答える 2

2

注:以下は正しいと思いましたが、コードでまだ確認できていません。メテオ コア グループからもう少し情報を入手したいと思います。

とはいえ、これらは私の当初の考えでした:

を使用せずにサーバーでメソッドを呼び出す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);
        });
    });
}
于 2013-01-16T23:53:29.233 に答える
2

特定のクライアント/サーバー接続で、サーバーはクライアントからのメッセージ (メソッド呼び出し、sub/unsub 要求など) を順番に処理します。サーバーは、次の 2 つのいずれかが発生するまで、メッセージ N+1 の処理を​​開始しません。

  • メッセージ N の処理を​​完了します。メソッドの場合、これはメソッド本体の実行が終了したことを意味します。サブスクリプションの場合、これはパブリッシュ ハンドラーの実行が終了したことを意味します。
  • メッセージ N はメソッド呼び出しであり、メソッド本体は を呼び出しますthis.unblock

(たとえば、複数の subscribe メソッドを並行して処理できるように、将来これらの制限を緩和することを想像することができます。)

于 2013-01-17T01:51:29.990 に答える