問題タブ [evented-io]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - Node.js とは何ですか?
私はNode.jsが何であるかを完全には理解していません。おそらく、私は主に Web ベースのビジネス アプリケーション開発者だからです。それは何ですか?
これまでの私の理解は次のとおりです。
- プログラミング モデルは、特にI/Oの処理方法において、イベント駆動型です。
- JavaScriptを使用し、パーサーはV8です。
- 並行サーバー アプリケーションの作成に簡単に使用できます。
私の理解は正しいですか?はいの場合、イベント I/O の利点は何ですか? また、Node.js は JavaScript ベース (V8 ベース) のプログラミング モデルのようなフレームワークになる方向ですか?
javascript - node.jsで開いている接続の数を確認するには?
私は、tcp サーバー (tcp.createServer) と http サーバー (http.createServer) で node.js (v0.1.32) を実行しているマシンを持っています。HTTP サーバーは、ポート 80 のコメット ベースのアプリケーションからの長いポーリング要求 (それぞれ 50 秒続く) にヒットします。また、同じ目的で、iphone アプリケーションからポート 8080 に tcp ソケット接続があります。
しばらくの間、サーバーがそれ以上の接続 (特に、http 接続は問題ないように見えたのに tcp 接続!!??) を処理できず、再起動後にのみ正常になることがわかりました。
接続の負荷テストのために、tcp サーバーを作成して 2000 のリクエストを生成し、マシンのファイル記述子の最大制限 (デフォルトは 1024) に達した後、接続が失敗し始めることを確認しました。これは本当に非常に小さな数です。
したがって、ここでの初心者の質問: node.js でより多くの接続を処理するためにアプリケーションをスケーリングする方法と、この問題をどのように処理するかです。
現在アクティブな接続がいくつあるかを調べる方法はありますか?
ありがとうシャリフ
node.js - Node.js は何もしない効率を提供しますか?
Node.js を「効率的に何もしない」Web サーバーと表現するスピーカーを聞いたことがあります。私は冗談だと思ったが、他の人は同意するようにうなずいた. 誰かがこのフレーズの私の誤解を説明できますか?
javascript - スケーラビリティ以外に node.js を使用するアーキテクチャ上の理由は何ですか?
node.js を使用する理由について私が読んだ最も一般的なテーマは、イベント化されたノンブロッキング I/O モデルによる高いスケーラビリティです。私は他の非スケーラビリティの使用例を理解しようとしています (そして、一般的なサーバー側の JavaScript エンジンとして使用されることは別として)。
- スケーラビリティが私の懸念事項でない場合、node.js には他のユースケースがありますか?
- #1に「はい」の場合、それらは何ですか?
- node.js の使用は、特定のタイプのアプリケーション アーキテクチャに適していますか? たとえば、一部のキー/値 (nosql - この用語は嫌いです) データベースがスケーラビリティ以外の理由で有用であるのと同様です。
javascript - node.jsはクライアント<->Webサーバーフローのどこにありますか?
node.jsがクライアントやWebサーバーにどのように適合するかに関して、以下の私の説明は正しいですか?
- (A)はクライアントです
- (B)一部のWebサーバーで実行されているnode.jsです
- (C)は、「GetCustomer()」などのビジネスロジック、データベースアクセスルーチンをホストする「サービス」です。簡単にするために、サービス(C)がRESTインターフェースを公開すると仮定します。
したがって、フローでは、クライアント(A)がnode.js(B)からリソースを要求し、次にこの要求をサービス(C)にディスパッチします。顧客情報を取得し、コールバックを介してnode.js(B)に返します。次に、node.jsはその応答をクライアントに返します。
1.これは正しいですか?
2つの関連する質問:
2. node.jsは、リクエストをディスパッチするサービスをどのように認識しますか?クライアントはサービスと直接通信していないため、サービスAPIをミラーリングするAPI「スタブ」をnode.jsに作成する必要がありますか?
3.このアーキテクチャではセッション状態はどのように処理されますか?
c - Cに単純な/例のイベント駆動型Webサーバーはありますか?
オンラインにはスレッドベースのWebサーバーの例がたくさんありますが、イベントループベースのWebサーバーの良い例を示すものは実際には見たことがありません(lighttpやnginxなどの非常に複雑なものではありません)。
いずれかがあります?そうでない場合、この種のサーバーを作成する方法を学ぶために、何を読んだり見たりする必要がありますか?(これには、Cでの非同期IOなどが含まれます)
特にPythonのような高級言語で、イベントループベースのプログラミングがどのように機能するかの基本をすでに理解していますが、Cで実装できる必要があります。
javascript - この Socket.IO コードはブロックされた接続を作成しますか?
Node.js コードを記述する際の一般的なルールは、すべてのコードが非ブロックであり、イベントを介して通信する必要があるということです。Node.js 用の Socket.IO ライブラリを使用して記述されたこのコードがブロックされた接続を作成するのか、それとも一般的な Node.js ルールに従っているのかを知りたいです。
どんな助けにも感謝します。
node.js - Node.jsイベントループはどのように機能しますか?
Node.jsで遊んで、非同期I / Oとイベントプログラミングについてたくさん読んだ後、疑問符がいくつか残っています。
次の(擬似)コードについて考えてみます。
(私は思う)イベントループの基本を理解している。libevを使用すると、Node.jsは一連のファイル記述子をポーリング(epoll / kqueue / ...)して、イベントがトリガーされたかどうか(新しい接続、書き込み可能、データが利用可能など)を確認するイベントループを作成します。新しいリクエストがある場合、イベントループはcreateServerに渡された無名関数を呼び出します。私が理解していないのは、その後に何が起こるかです。
1)クエリを同時に実行するには、dbドライバーに何らかのスレッド/接続プールが必要です。
2)1つのリクエストの範囲内:2つのクエリを送信するとどうなりますか?クエリがまだ返されていないため、renderViewを呼び出すことはできません。クエリが返されるのをどのように待ちますか?続行する前に、発生するまで保留中のコールバックのカウントを保持する必要がありますか?私が持っていた基本的な考えは次のとおりでした。
onRequest->非同期コードの実行->コールバックの待機->応答の作成。この場合の待機はブロックされるため、onRequestごとにスレッドを効果的に生成する必要があります。「応答を作成する前にコールバックが実行されるのを待つ」はどのように行われますか?
3)dbドライバーは、イベントループにそれが完了したことをどのように通知し、クエリ結果でコールバックを呼び出す必要がありますか?
4)イベントループは、onRequestイベントで作成した無名関数内でどのようにコールバックを実行しますか?これは、コールバック関数でコンテキストが「保存」されるクロージャの概念が登場する場所ですか?
4)dbの結果が得られたので、どのようにしてrenderView/res.write/res.end
パーツの実行を継続しますか?
multithreading - オペレーティング システムの軽量スレッド
Node (およびおそらく twisted など) の主な利点の 1 つは、従来のスレッド サーバーに対する、イベント ループ モデルによって実現される非常に高い同時実行性であると言われています。これの最大の理由は、各スレッドのメモリ フットプリントが大きく、コンテキストのスワッピングに比較的コストがかかることです。何千ものスレッドがある場合、サーバーはほとんどの時間をスレッドからスレッドへのスワップに費やします。
私の質問は、オペレーティング システムまたは基盤となるハードウェアが、より軽量なスレッドをサポートしないのはなぜですか? もしそうなら、プレーンスレッドで 10k 問題を解決できますか? できない場合、それはなぜですか?
ruby-on-rails - パフォーマンスの低いシン サーバー / イベント化された Web サーバーはどのように機能しますか?
Nginx/Passenger に Rails 3 アプリがあり、Nginx/Thin (1.3.1) に移動したばかりです。ただし、私のアプリは Passenger よりも明らかに遅くなりました。多くのリクエストもタイムアウトします。
Thin は、イベント化された Web サーバーです。イベント Web サーバーについて読んだところによると、それらにはワーカーの概念がありません。1 人の「ワーカー」がすべてを処理します。したがって、1 つの要求が IO で待機している場合、シンは次の要求に進むだけです。イベント サーバーについて私が読んだ 1 つの説明では、イベント サーバーはシステム リソースによってのみバインドされるため、ワーカー ベースのサーバーと同等またはそれ以上のパフォーマンスが必要であると述べていました。
ただし、私の CPU 使用率はほとんどありません。私のメモリ使用量も非常に少なく、IO もあまり発生していません。私のアプリは、いくつかの MySQL クエリを作成するだけです。
ここでのボトルネックは何ですか?CPU が 100% になるまで、シン サーバーでリクエストを処理するべきではありませんか? イベントサーバーでアプリのパフォーマンスを向上させるために、アプリで何か違うことをする必要がありますか?