私の質問は、新しいイベントが存在しない場合でも、http サーバーのような node.js アプリケーションをどのように実行し続けるのですか?
新しいイベントがキューに入れられないと、libuv イベント ループが終了すると思いました。
イベントに登録されたイベントリスナーを使用した while(true) {} ループのようなものですか?
これが私の質問の簡単なコード例です:
var http = require("http");
var server = http.createServer(function(request, response) {
response.write("Hello World!");
response.end();
});
server.listen(8080);
ありがとう
編集: libuv io loop docから、各ループ反復の開始時にループが有効でなければならないことがわかっています。つまり、より多くのイベントが発生し、より多くのコールバックが実行されるように登録されます。
この例では、イベント リスナーが登録されていますが、次のループ反復の前にそれ以上イベントが起動されなかったため、プログラムは 1 つのイベントが処理された後に終了します。
var EventEmitter = require('events').EventEmitter;
eventEmitter.on('event1', function() {
console.log('event1 has occured');
});
eventEmitter.emit('event1');
ただし、この例では、タイマーがアクティブなため、プログラムは無期限に続行されます。
setTimeout(function() {
console.log('setTimeout callback occured');
}, 2000);
では、http サーバーの例でループ (アクティブ ハンドルと参照ハンドル) を維持しているのは何ですか?