2017-05-24 6 views
0

これはかなり明白であればよろしいですか?私は、node.jsがブラウザからのリクエストにどのように反応するのかを理解するのに苦労しています。私はexpress.jsがnode.jsで残りのサーバーサイドコードを構築するために使われたインターネット上のチュートリアルを終えました。今や、約束通りに働くルートは別として設定されています。したがって、約束が解決された場合にのみ、返信が返送されることは明らかです。だから、流れは次のようになります -node.jsはREST Webサービスへの応答をどのように同期的に返しますか?

//第一ライン

ブラウザ - > RESTサービス

// 2行目

RESTサービス - >ルートを見つける - >サービスを打つ - > GETデータ - >データをブラウザに戻す

2行目のプロセス全体が非同期モードです。サーバー側にスレッドがぶら下がり、ブラウザはnode.jsが有効なRESTサービスが応答を返すのを待っていますか?そうでない場合、ブラウザーやPOSTMANなどのRESTクライアントは、リアルタイムで応答をどのように知るのでしょうか。

編集:

私は混乱を招いているので外部リンクを削除しました。

+1

「サーバー側にスレッドがぶら下がっていますか」 - どうしてですか?あなたが言ったように、それは約束を使用します。 – Quentin

+1

"ブラウザーはnode.jsが有効なRESTサービスが応答を返すのを待っています" - HTTPクライアント*は常に応答を待つ必要があります。ネットワークには時間がかかります。ここには何も特別なものはありません。 – Quentin

+0

応答を待たなければならない場合は、サーバー側でもスレッドが開かれます。さもなければあなたはどのように応答を返すでしょうか? – user3276247

答えて

3

nodejsはネットワーク要求にスレッドを使用しません。これは、オペレーティングシステムに組み込まれているネットワークの非同期サポートを使用します。したがって、nodejsの保留中のネットワーク要求は、要求ごとに開かれたスレッドを維持しません。それはオープンソケットを持っています。 nodejsプロセスは、そのソケットに保留中のデータがある場合に通知を受けます。

同様に、約束によってスレッドが開かれることはありません。約束は、非同期操作が終了し、約束が.then()ハンドラを登録したコードに通知することができるときに、基になる非同期操作が解決または拒否する通知スキームです。

あなたが提供したリンクでは、どのコードを参照しているのかがはっきりしていません。特定のコードについて質問したい場合は、そのコードを直接質問に貼り付けて、外部リンクにしか存在しないことを尋ねているコードに関するスタックオーバーフローのガイドラインに従ってください。

2行目のプロセス全体が非同期モードです。サーバー側にスレッドがぶら下がり、ブラウザはnode.jsが有効なRESTサービスが応答を返すのを待っていますか?

"セカンドライン"とはどういう意味ですか?あなたが提供したリンクにはたくさんのコードがあります。 nodejの内部のネットワーク要求は、要求ごとにスレッドを使用しません。彼らは開いているTCPソケットを保持しますが、ネイティブスレッドではなく、ソケットにOSの基本的な非同期通知サポートを使用します。

そうでない場合、ブラウザまたはPOSTMANなどのRESTクライアントは、リアルタイムで応答をどのように知るようになりますか。

POSTMANまたはRESTクライアントは、(そのTCP接続でHTTPプロトコルを使用して)サーバーにTCP接続しています。彼らは、TCP接続を作成し、そのソケットでHTTP要求を送信し、そのソケットは応答を待つ間開いたままです。サーバーはビジネスを終了すると、開いているTCPソケットを介して応答を返します。クライアント側のコードを書くことができる方法はたくさんありますが(POSTMANとブラウザはクライアントコードを異なる方法で書く可能性があります)、データがTCPソケットに到着すると、クライアントには何らかの形でデータがあることが通知されます。クライアントはそのデータを読み込み、応答を処理します。そして、これはHTTP要求/応答プロトコルであるため、TCP接続はおそらく閉じられます。

+0

外部リンクがちょうど流れ=> RESTサービスをillsutrateしたおかげ@robertklep – user3276247

+0

私はまた、2行目にコメントを付けました。とにかくあなたの答えは私の質問を解決します。私はそれを受け入れる。そのような詳細な応答をありがとう。 – user3276247

関連する問題