6

node.jsWebプラットフォームとして検討しています。しかし、私は1つの重要な質問があります。なぜなら、私は次のアーキテクチャを取得していないと思うからですnode.js

  1. デフォルトでは、WSGIなどを使用せずにカスタムHTTPサーバーを使用する必要があるようです。

  2. 応答で(一部のI / Oだけでなく)「実際の計算」を行うと、すべてのインフラストラクチャが混乱し、ab -n ... -c ...Python(Pyramid / Flaskなど)と比較して、リクエストごとに膨大な時間を返すように見えます。

  3. それで、著者はnode.js私たちがI / Oだけをしていると思いますか、それとも私は非常に基本的なことを見逃しましたか?

4

3 に答える 3

16
  1. 「デフォルトで」と「強制」には互換性がありません。任意の HTTP ライブラリを使用できます。コアhttpモジュールは「デフォルト」と考えられるかもしれませんが、別のモジュールを使用することを妨げるものはありません。

  2. JavaScript はシングルスレッド言語であり、Node.js は JavaScript ランタイムであり、他の多くの言語のように応答ごとにスレッドを生成する Web サーバーではありません。必要に応じて、応答ごとにスレッドを実行することもできます。これを行う Node 上に構築されたプロジェクトもありますが、Node の利点のほとんどが失われます。Web リクエストに応じて計算量の多い処理を行っている場合 (そして、それを待ってくれるクライアントがいる場合)、多くの利用可能なソリューション (Web ワーカー、スレッド) のいずれかを介して別のスレッドをスピンオフする必要があります。 -a-go-go、child_process など)。

  3. Node.js の作成者は、ユーザーが Web サーバーを作成していると想定しています。Web サーバーで行うことのほとんどは、本質的には IO であり、その IO がファイルシステム、データベース、または他のワークハウス プロセスで計算集約型のタスクをキューに入れるために使用されるメッセージ バスに関係するかどうかにかかわらずです。

あなたの質問を見ると、Node.js を Python および WSGI と統合しようとしている場合、Node.js とは何かについて基本的な誤解があるようです。Node.js は Web サーバーを作成するためのものなので、Python と一緒に使用してみませんか? パイソンの中?(あなたが何を達成しようとしているのか本当にわかりません)ほとんど意味がありません。

タスクが I/O バウンドだけではない場合、Web サーバーと同じボックスでそれらのタスクをホストするべきではありません。したがって、メッセージ バス アプローチは 3 で簡単に説明しました。しかし、そうすることに決めていて、それらのタスクがすべての CPU を占有しないことが確実な場合は、そのようなタスクがどのくらいの頻度で普及しているかを判断する必要があります。それらがすべての Web リクエストにある場合は、Node.js を使用しないでください。あなたはその最も基本的な利点を放棄し、マイナーなものだけを残しています (その周りに成長したエコシステムなど)。それらがまれな場合は、2 で利用可能な多くの方法を使用して、別のスレッドでスピンオフする必要があります。

関連: https://gist.github.com/2794861

于 2012-05-26T19:38:10.717 に答える
3

Python ベースのショップの場合は、Python で作成されたイベント駆動型フレームワークであるTwistedも検討することをお勧めします。Twisted は、実行時間の長いブロッキング作業をスレッドに任せることもできます。

最も重要なことは、まず何が必要で、何が問題なのかを定義することです。誰もがそれについて話しているからといって、新しい派手なものに飛びつかないでください. あなたのニーズを見て、それらに対応するものを使用してください。

于 2012-05-26T19:39:06.843 に答える
0

WSGIの後にパターン化されたnode.jsモジュールがあることがわかります:Strata

また、集中的な計算を子プロセスにオフロードできます。子プロセス

于 2012-05-26T19:44:34.897 に答える