Node.jsイベントループ
Node.js イベント ループ
Node.js は単一プロセスのシングルスレッド アプリケーションですが、イベントとコールバックによる同時実行をサポートしているため、パフォーマンスは非常に高くなります。
Node.js のすべての API は非同期であり、別個のスレッドとして実行され、非同期関数呼び出しを使用し、同時実行を処理します。
Node.js 基本的にすべてのイベントメカニズムは、デザインパターンのオブザーバーパターンを使用して実装されます。
Node.js の単一スレッドは、イベント オブザーバーが終了するまで while(true) イベント ループに入るのと似ています。イベントが発生すると、
Event ドライバーが呼び出されます。
Node.js はイベント駆動型モデルを使用します。Web サーバーはリクエストを受信すると、リクエストを閉じて処理し、次の Web リクエストを処理します。 このリクエストは完了すると処理キューに戻され、キューの先頭に到達すると結果がユーザーに返されます。 ウェブサーバーは読み取りまたは書き込み操作を待たずに常にリクエストを受け入れるため、このモデルは非常に効率的でスケーラブルです。 (これは、ノンブロッキング IO またはイベント ドリブン IO とも呼ばれます)イベント ドリブン モデルでは、イベントをリッスンするためにメイン ループが生成され、イベントが検出されるとコールバック関数がトリガーされます。

// 引入 events 模块var events = require('events');// 创建 eventEmitter 对象var eventEmitter = new events.EventEmitter();次のプログラムはイベント ハンドラーをバインドします。 us イベントはプログラムでトリガーできます:
// 绑定事件及事件的处理程序eventEmitter.on('eventName', eventHandler);Instance
次のコードを含む main.js ファイルを作成します:
// 触发事件eventEmitter.emit('eventName');次に、上記のコードを実行してみましょう:
// 引入 events 模块
var events = require('events');
// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();
// 创建事件处理程序
var connectHandler = function connected() {
console.log('连接成功。');
// 触发 data_received 事件
eventEmitter.emit('data_received');
}
// 绑定 connection 事件处理程序
eventEmitter.on('connection', connectHandler);
// 使用匿名函数绑定 data_received 事件
eventEmitter.on('data_received', function(){
console.log('数据接收成功。');
});
// 触发 connection 事件
eventEmitter.emit('connection');
console.log("程序执行完毕。");
Node アプリケーションはどのように動作しますか?
Node アプリケーションでは、非同期操作を実行する関数は最後のパラメーターとしてコールバック関数を受け取ります。 コールバック関数は、最初のパラメータとしてエラー オブジェクトを受け取ります。 次に、前の例をもう一度見て、次のファイル内容で input.txt を作成しましょう:
$ node main.js 连接成功。 数据接收成功。 程序执行完毕。次のコードで main.js ファイルを作成します:
菜鸟教程官网地址:www.runoob.com上記のプログラムでは、 fs.readFile( ) は、ファイルの読み取りに使用される非同期関数です。 ファイルの読み取り中にエラーが発生した場合、error err オブジェクトはエラー情報を出力します。 エラーが発生しない場合、readFile は err オブジェクトの出力をスキップし、ファイルの内容はコールバック関数を通じて出力されます。 上記のコードを実行すると、実行結果は以下のようになります。
var fs = require("fs"); fs.readFile('input.txt', function (err, data) { if (err){ console.log(err.stack); return; } console.log(data.toString()); }); console.log("程序执行完毕");次に、input.txtファイルを削除します。実行結果は以下のようになります。
程序执行完毕 php中文网官网地址:www.php.cnファイルinput.txtが存在しないため、エラーメッセージが表示されます出力。