Node.jsタイムループの利用について

jacklove
リリース: 2018-05-07 09:31:34
オリジナル
1564 人が閲覧しました

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 の登録メールをアクティブ化する方法は何ですか?

Node.Js でビットコイン アドレスを実装する方法

以上がNode.jsタイムループの利用についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!