Node.js は単一プロセス、単一スレッドのアプリケーションですが、イベントとコールバックによる同時実行をサポートしているため、パフォーマンスは非常に高くなります。
(出典: Javascript はシングルスレッドで非同期ですが、これらの言語にはイベント駆動型であるという共通の特徴があります。言語を駆動するイベントは異種プラットフォームから来ます。)
Node.js のすべての API は非同期であり、別個のスレッドとして実行され、非同期関数呼び出しを使用し、同時実行を処理します。
基本的に、Node.js のすべてのイベント メカニズムは、デザイン パターンのオブザーバー パターンを使用して実装されます。
Node.js の単一スレッドは、イベント オブザーバーが終了するまで while(true) イベント ループに入るのと似ています。イベントが発生すると、コールバック関数が呼び出されます。
イベント駆動型モデル
(これはノンブロッキング IO またはイベント駆動型 IO とも呼ばれます)
これは、イベント駆動型プロセス全体が実装される方法であり、非常に簡単です。オブザーバー パターンとある程度似ており、イベントはサブジェクト (Subject) に相当し、このイベントに登録されたすべてのハンドラー関数はオブザーバー (Observer) に相当します。
//引入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("程序执行完毕。");
接続に成功しました。
データは正常に受信されました。
プログラムの実行が完了しました。
上記の結果は、ご想像のとおり、このイベント駆動モデルを通じて非同期操作を実現できます。
(たとえば、他のコマンドの実行中にファイルを読み取ることができます。ファイルの読み取りが完了すると、ファイルの内容がコールバック関数のパラメーターとして返されます。この方法では、ファイル I/O のブロックや待機は発生しません。これにより、Node.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("程序执行完毕。");
プログラムの実行が完了しました。
input.txt の内容。
上記のコードから、fs.readFile がイベントを配布できることがわかります。もちろん、Node.js の多くのオブジェクトは、新しい接続があるたびにイベントを配布します。これらの生成される Event オブジェクトはすべて events.EventEmitter のインスタンスです。
しかし、ほとんどの場合、EventEmitter を直接使用するのではなく、オブジェクト内で継承します。イベント応答をサポートするコア モジュールが EventEmitter のサブクラスである限り、fs、net、http が含まれます。
まず、あるエンティティ関数を持つオブジェクトのイベント実装は、イベントの監視と発行がオブジェクトのメソッドである必要があります。
次に、JavaScript のオブジェクト メカニズムはプロトタイプに基づいており、EventEmitter を継承しても、オブジェクトの元の継承関係が損なわれることはありません。
Node.js をインストールするには、通常、ソース コードをコンパイルする方法と、コンパイルされたファイルを使用する方法の 2 つがあります。
現在、ホームディレクトリにダウンロードしたばかりのnode-v4.2.3-linux-x64があります
を解凍します。
でノードコマンドを使用できるようにすることです。
4. ノードコマンドを使用して上記のコードを実行します
ノードサーバー.js
上記のコマンドを実行すると、コマンド ラインに「Server runnint at http://127.0.0.1:8888/」と表示されます。これは、プログラムが正常に実行されたことを意味します。
私のサーバーは Alibaba Cloud で実行されているため、外部ブラウザに Alibaba Cloud IP + ポートを入力するだけでアクセスできます。