2012-08-02 2 views
19

流星のドキュメントの状態:流星スレッドスタイルの明確化

、彼らが実際に意味するかメテオで

は、サーバーのコードがないノードの典型的な非同期コールバックのスタイルで、リクエストごとに単一のスレッドで実行されます?

A)サーバ)のNode.jsエコシステム内の異常な思われる(並列に複数のスレッドを実行している

又は

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

答えて

12

Brad、あなたのBは正しいです。

メテオールは内部でfibersを使用します。あなたが言ったように、イベントが発生したサーバー内にはスレッドが1つしかありませんが、データベースの読み込みを行うと、Fibersの歩留まりと制御がすぐにイベントループに戻ります。

doc = MyCollection.findOne(id); 

(隠して「ドキュメントがここにあるときにイベントループに歩留まり、戻ってきて」)ではなく

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

だけでも、繊維バージョンでのエラー処理:だからあなたのコードは次のようになります毎回引数をチェックする必要はなく、標準のJavaScript例外を使用します。

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

+3

メテオの文書では、実際に説明を使用することができます。これは、彼らが取った非常に良いアプローチのように聞こえますが、文言は、それが本当にボンネットの下で何が起こっているのか疑問に思った。 –

+0

個別のスレッドでリクエストを処理する計画はありますか? – trusktr