Node.jsの方がパフォーマンスが良いのでよく使われているので、この記事で詳しく解説します。
Node.js は単一プロセスのシングルスレッド アプリケーションですが、イベントとコールバックによる同時実行をサポートしているため、パフォーマンスは非常に高くなります。
Node.js のすべての API は非同期であり、独立したスレッドとして実行され、非同期関数呼び出しを使用し、同時実行を処理します。
Node.js 基本的にすべてのイベントメカニズムは、デザインパターンのオブザーバーパターンを使用して実装されます。
Node.js の単一スレッドは、イベント オブザーバーが終了するまで while(true) イベント ループに入るのと似ています。イベントが発生すると、
コールバック関数が呼び出されます。
Node.js はイベント駆動型モデルを使用します。Web サーバーはリクエストを受信すると、リクエストを閉じて処理し、次の Web リクエストを処理します。
このリクエストは完了すると処理キューに戻され、キューの先頭に到達すると結果がユーザーに返されます。
ウェブサーバーは読み取りまたは書き込み操作を待たずに常にリクエストを受け入れるため、このモデルは非常に効率的でスケーラブルです。 (これは、ノンブロッキング IO またはイベント ドリブン IO とも呼ばれます)
イベント ドリブン モデルでは、イベントをリッスンするためにメイン ループが生成され、イベントが検出されるとコールバック関数がトリガーされます。
イベント駆動型プロセス全体はこのように非常に簡単に実装されます。オブザーバー パターンとある程度似ており、イベントはサブジェクト (Subject) に相当し、このイベントに登録されたすべてのハンドラー関数はオブザーバー (Observer) に相当します。
Node.js には複数の組み込みイベントがあります。以下に示すように、イベント モジュールを導入し、EventEmitter クラスをインスタンス化することで、イベントをバインドしてリッスンできます。
// 引入 events 模块var events = require('events');// 创建 eventEmitter 对象var eventEmitter = new events.EventEmitter(); 以下程序绑定事件处理程序: // 绑定事件及事件的处理程序eventEmitter.on('eventName', eventHandler); 我们可以通过程序触发事件: // 触发事件eventEmitter.emit('eventName');
Instance
main.js ファイルを作成します。コードは次のとおりです。以下のように表示:
// 引入 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("程序执行完毕。");
次に、上記のコードを実行してみましょう:
$ ノード main.js 接続は成功しました。データは正常に受信されました。プログラムの実行が完了します。
Node アプリケーションはどのように機能しますか?
Node アプリケーションでは、非同期操作を実行する関数は最後のパラメーターとしてコールバック関数を受け取り、コールバック関数は最初のパラメーターとしてエラー オブジェクトを受け取ります。
次に、前の例をもう一度見て、input.txt を作成します。ファイルの内容は次のとおりです:
初心者向けチュートリアルの公式 Web サイトのアドレス: www.runoob.com
main.js を作成します。次のコードを含むファイル:
var fs = require("fs");fs.readFile('input.txt', function (err, data) { if (err){ console.log(err.stack); return; } console.log(data.toString());});console.log("程序执行完毕");
上記では、Node.js の使用方法を詳しく紹介しています。さらに関連した知識を知りたい場合は、php 中国語 Web サイトに注目してください。
関連する推奨事項:
Node.js の登録メールをアクティブ化する方法は何ですか?
以上がNode.jsタイムループの利用についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。