Node.jsのは、単一のプロセス、シングルスレッドアプリケーションであるが、非同期コールバックインターフェースV8エンジンが提供起因して、これらのインタフェースを介して同時の多数を扱うことができるので、性能は非常に高いです。
Node.jsのAPIは、ほぼすべてのコールバック関数によってサポートされています。
Node.jsのは、実質的にイベントメカニズムのすべては、設計モードオブザーバ・モードで実装されています。
イベントは、コールバック関数と呼ばれて発生した場合、何の出口イベントオブザーバ存在しなくなるまでのNode.jsはシングルスレッドながら(真)イベントループに入ると同様であり、各非同期イベントは、イベントオブザーバを生成します。
6-1イベント駆動型プログラミング
その後、Node.jsのイベント駆動型Webサーバがリクエストを受信したモデルと、それを先送りにして、Webサービスに次の要求するように処理。
リクエストが完了すると、それはキューが最初に到達したときに、結果がユーザーに返され、処理キューをバックに置かれています。
このモデルは、ウェブサーバは、任意の読み取りまたは書き込み操作を待たずに要求を受信しているため、非常に効率的な拡張性は、非常に強いです。(これは、イベント駆動型、非ブロッキングIOまたはIOとして知られています)
イベント駆動型モデルでは、それはイベントを監視するためのメインループが生成され、イベントが検出されたコールバック関数がトリガー。全体イベント駆動型のプロセスは非常にシンプルなので、達成可能です。オブザーバーパターンにいくらか類似し、イベントがテーマ(主題)に相当し、このイベントの処理機能は、登録されたすべての観察者(観察)と等価です。
Node.jsのは、私たちがイベントモジュールの導入によることができ、結合して、次の例を持つEventEmitterクラスをインスタンス化することにより、イベントをリッスンするために、複数の組み込みのイベントがあります。
// 引入 events 模块
var events = require('events');
// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();
イベントハンドラをバインド、次の手順:
// 绑定事件及事件的处理程序
eventEmitter.on('eventName', eventHandler);
我们可以通过程序触发事件:
// 触发事件
eventEmitter.emit('eventName');
次のように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("程序执行完毕。");
のは、上記のコードを実行してみましょう:
$ node main.js
连接成功。
数据接收成功。
程序执行完毕。
どのノードアプリケーションの動作?
ノード内のアプリケーション機能は、コールバック関数が最初のパラメータとしてエラーオブジェクトを受け取り、最後のパラメータコールバックとして非同期動作を行います。
次のように私たちは前の例で再見てみましょう、INPUT.TXTを作成し、文書が読み取ります。
菜鸟教程官网地址: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("程序执行完毕");
ファイルを読むためfs.readFile上記のプログラム()関数は非同期です。エラーは、ファイルの読み出し処理で発生した場合、誤差errオブジェクト出力エラーメッセージがなります。
エラーが発生していない場合、readFileのは、出力Errオブジェクトをスキップし、文書には、コールバック関数によって出力されます。
上記のコードは次のように実行結果は、実行されます。
程序执行完毕
菜鸟教程官网地址:www.runoob.com
次は、次のような結果があり、INPUT.TXTファイルを削除します。
程序执行完毕
Error: ENOENT, open 'input.txt'
INPUT.TXTファイルが存在し、そのエラーメッセージの出力はありませんので。