19

Meteorのドキュメントには次のように記載されています。

Meteorでは、サーバーコードは、Nodeで一般的な非同期コールバックスタイルではなく、リクエストごとに1つのスレッドで実行されます。

彼らは実際に意味しますか?

A)サーバーが複数のスレッドを並行して実行している(これはNode.jsエコシステム内では珍しいようです)

また

B)イベントサーバー内にはまだ1つのスレッドしかなく、各リクエストは、少なくともサーバー外のリソース(データストアなど)を呼び出すまで順番に処理されます。データストアのように、サーバー自体がコールバックを処理している間、他のリクエストなので、コールバックを自分で作成/管理する必要はありません。

4

1 に答える 1

12

ブラッド、あなたの B は正しいです。

Meteor は内部でファイバーを使用しています。あなたが言ったように、イベント サーバー内には 1 つのスレッドしかありませんが、(たとえば) データベースの読み取りを行うと、Fibers は降伏し、制御はすぐにイベント ループに戻ります。したがって、コードは次のようになります。

doc = MyCollection.findOne(id);

(隠された「イベントループへの譲歩、ドキュメントがここにあるときに戻ってくる」) ではなく

MyCollection.findOne(id, function (err, doc) {
  if (err)
     handle(err);
  process(doc);
});

ファイバー バージョンでのエラー処理も、毎回引数をチェックする必要がなく、標準の JavaScript 例外を使用するだけです。

これにより、一連の相互に依存する一連のアクションを実行したいビジネスロジックのコードスタイルが読みやすくなると思います。ただし、非同期スタイルを使用する場合、Meteor の同期 API のほとんどはオプションでコールバックを受け取り、非同期になります。

于 2012-12-14T00:29:36.913 に答える