2016-04-28 8 views
3

Node.jsアプリケーションを実行し続けているかどうかを決めるには?コードはこのようなものである場合にはNode.jsアプリケーションを実行し続けているかどうかを決定するにはどうすればよいですか?

console.log('Hello World'); 

このフレーズが印刷され、アプリがすぐに終了します。

しかし、私たちがリッスンしているWebサーバーのようなものを持っていると、それは動作し続けることがあります。

アプリを実行し続けるかどうかを決定する一般的なルールは何ですか?それは何かイベントループやそれに似たものですか?

+0

あなたは、node.jsアプリケーションのようなルータを聴いていると仮定して、パイプを終了したり、Reponse.Endを与えたりしていません。実行し続けるコードの例はありますか? –

+0

アプリケーションを生かしておくために、何らかのプロセスが必要です。 'setInterval(function(){console.log(" Hello World。 ")}、1000);' – hampusohlsson

+0

https://github.com/mafintosh/why-is-node-running – dude

答えて

0

私は、イベントループにはサーバを稼働させたままで何かがあるとは思われません。あなたがhttpを介していくつかのリクエストを期待しているときは、あなたのユーザがリクエストするいくつかのポートを聴かなければなりません。ユーザーからサーバーへの要求を停止しない限り、引き続きリスニングする必要があります。 user-1は、あなたのサーバがリクエストを受け取り、それに取り組んで起動する要求を送信するとき一方イベントループ

は何かです。しかし、node.jsのおかげで、ポートを保持していない...それは聞いています。 user-2がリクエストを送信すると、サーバーは要求を受け取り、user-1の場合と同様に処理を開始します。あなたのサーバがuser-1's要求で完了すると、それはユーザ-1に必要な情報で応答します。そしてそれはuser-2のために同じことをします。しかし、サーバがuser-2'sリクエストを処理し終えてからuser-1'sリクエストを完了すると、user-2に応答が送信され、user-1に送信されます。

ここで、千のリクエストを考えると、応答を返すためのループがあります。そのループはイベントループと呼ばれます。

この回答が理にかなっています。ありがとう!!

3

イベントループは、(部分的に)ノードによって開かれているプロセスが原因です。

要するに、イベントループは、イベントループのコードキューイングイベントによって機能し、イベントがキューに入れられている限り、プロセスは存在しません。すべてのイベントが使い尽くされ、コードの実行が終了すると、実行するコードがなくなり、処理するイベントがなくなり、デフォルトでプロセスがそこに存在します。

"バックグラウンドで動作する"ものは、実際にイベントループが処理するイベントをスケジューリングしていて、それが完了したかどうかを確認するものです。 httpサーバやさまざまなイベントエミッタのようなものは、プロセスが決して終了しないようにします。

+0

あなたは正しいです。私の答えは部分的に間違っていると思う。イベントループは私が言ったように動作しませんか? –

+0

あなたの答えは、イベントループの反対側(どのように物事が平行に見えているか)を詳述していますが、正しいですが「なぜプロセスが終了しないようにしていますか? –

+0

この回答は完全に正確ではありません。もちろん、キューにイベントが残っているとノードは停止しませんが、空でも*時には停止することもあります。それは実際に面白いことです。 – Bergi

関連する問題