Node.js のイベント モジュールに関する知識ポイントのまとめ

Node.js のイベント モジュールに関する知識ポイントのまとめ

Node の研究と応用を通じて、NodeJS はシングルスレッド、イベント駆動型、非ブロッキング I/O などのアーキテクチャ設計を採用しており、並行性が高く I/O を集中的に使用するアプリケーションに非常に適していることがわかりました。

1. イベント駆動とは何ですか?

イベント駆動型とは、簡単に言えば、効果的な方法でイベントステータスの変化を監視し、変化が発生したときにそれに応じたアクションを実行することです。

これを理解するために、日常生活のシナリオを使用しましょう。レストランで食事をして食べ物を注文すると、注文後、ウェイターが注文番号を伝え(これはイベントの登録として理解できます)、座って待ちます。このとき、私たちの耳は常にウェイターの呼び出し番号を聞いており、名前が呼ばれると、フロントデスクに行って食べ物を受け取ることができます。

2. イベントモデル

NodeJSのイベントアーキテクチャは、古典的なサブスクリプション公開モデルを使用します。

サブスクリプションおよびパブリケーション モード (メッセージ メカニズムとも呼ばれる) は依存関係を定義します。これは、1 対 N (複数または単一) のオブザーバーが同時にオブジェクトの対応する状態変化を監視することとして理解できます。変更が発生すると、すべてのオブザーバーに通知され、オブザーバーによって登録された対応するイベントがトリガーされます。この設計パターンは、メイン オブジェクトとオブザーバー間の機能的な結合を解決します。

3. イベントモジュール

イベント モジュールは、NodeJS で非常に重要なモジュールです。fs、http、net など、Node のモジュール実装のほとんどは、Events クラスを継承します。これは、オブジェクト events.EventEmitter を提供します。EventEmitter の中核は、イベントの発行とイベント リスナーです。

使い方は簡単:

'events' から EventEmitter をインポートします。
 
クラス MyEmiter は EventEmitter{} を拡張します。
 
const myEmitter = 新しい MyEmiter();
 
myEmitter.on('hello', () => {
  console.log('こんにちは、誰かがあなたに電話しています');
});
 
myEmitter.emit('hello');

4. イベントモジュールコアAPI

4.1 eventEmitter.on(イベント名、コールバック)

リスナーイベントの登録

パラメータ:

eventName: イベント名

コールバック: イベントがトリガーされたときに呼び出されるコールバック関数

4.2 eventEmitter.once(イベント名、コールバック)

特定のイベントに対して最大 1 回呼び出されるリスナーを登録することができます。 イベントがトリガーされると、リスナーは登録解除され、呼び出されます。

パラメータ:

eventName: イベント名

コールバック: イベントがトリガーされたときに呼び出されるコールバック関数

4.3 eventEmitter.emit(イベント名[, ...引数])

指定されたリスニングイベントをトリガーする

パラメータ:

eventName: イベント名

args はオプションのパラメータであり、順番にコールバック関数に渡されます。

4.4 eventEmitter.removeListener(イベント名、コールバック)

指定されたイベントのリスナーを削除します。注意: リスナーは登録されている必要があります。それ以外の場合は無効です。

パラメータ:

eventName: イベント名

コールバック: コールバック関数

4.5 EventEmitter.removeAllListeners(イベント名)

すべてのリスナーを削除します。イベントには複数のリスナーを設定できます。このメソッドは、すべてのリスナーを削除する必要がある場合に使用できます。

パラメータ:

eventName: 削除する必要があるイベントの名前。

パラメータが渡されない場合、すべての監視イベントが削除されることに注意してください。これは非常に危険なので、注意して使用する必要があります。

4.6 イベントエミッター.リスナー(イベント名)

eventName という名前のイベントのリスナー バインディング コールバック関数の配列のコピーを返します。

4.7 イベントエミッター.イベント名()

トリガーがリスナーを登録したイベントをリストする配列を返します。

4.8 イベントエミッター.setMaxListeners(n)

デフォルトでは、特定のイベントに 10 を超えるリスナーが追加された場合、EventEmitter は警告を出力します。

emittingter.setMaxListeners() メソッドを使用すると、この特定の EventEmitter インスタンスの制限を変更できます。 この値を Infinity (または 0) に設定すると、リスナーの数が無制限であることを示します。

5. 同期と非同期の問題

EventEmitter は、登録された順序ですべてのリスナーを同期的に呼び出します。これにより、イベントの正しい順序が保証され、競合状態や論理エラーを回避するのに役立ちます。

6. エラー処理

EventEmitter インスタンスでエラーが発生した場合、通常のアクションは「エラー」イベントを発行することです。 これらは Node.js では特別なケースとして扱われます。

EventEmitter に 'error' イベントのリスナーが 1 つも登録されていない場合に 'error' イベントが発生すると、エラーがスローされ、スタック トレースが出力され、Node.js プロセスが終了します。

ベストプラクティスとして、常に「エラー」イベントのリスナーを追加する必要があります。

'events' から EventEmitter をインポートします。
 
クラス MyEmiter は EventEmitter{} を拡張します。
 
const myEmitter = 新しい MyEmiter();
 
myEmitter.on('hello', () => {
  console.log('こんにちは、誰かがあなたに電話しています');
});
 
myEmitter.on('エラー', (e) => {
  コンソール.log(e)
})
 
myEmitter.emit('hello');
myEmitter.emit('error', new Error('エラーが発生しました'))

Node.js のイベントモジュールの豆知識についてはこれで終わりです。Node.js のイベントモジュールに関するその他のコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • node.JS イベントの仕組みとイベントモジュールの使い方の詳しい説明
  • node.js でのイベントトリガーイベントの使用例の分析
  • Node.js 学習イベントモジュール イベントの使用例
  • Node.js events.EventEmitter の使い方の紹介

<<:  ウェブデザイン必携ハンドブック 216 ウェブセーフカラー

>>:  Docker コンテナ データ ボリュームの名前付きマウントと匿名マウントの問題

推薦する

MySQLでデータを削除してもディスク領域が解放されないのはなぜですか

目次問題の説明解決問題分析問題の説明MySQL で delete ステートメントを使用してデータを削...

Docker コンテナの uid と gid の詳細な理解

デフォルトでは、コンテナ内のプロセスは root ユーザー権限で実行され、この root ユーザーは...

MySQL 結合クエリの原則の知識ポイント

MySQL 結合クエリ1. 基本概念2 つのテーブルの各行をペアで水平に接続して、すべての行の結果を...

docker ベースの redis-sentinel クラスターの構築例

1. 概要Redis Cluster は、Redis ノードのグループ間での高可用性とシャーディング...

mysqlは内部コマンドエラーの解決策ではありません

「mysqlは内部コマンドではありません」というエラーは、mysqlのbinディレクトリパスが環境変...

Vue ユニットテストに推奨されるプラグインと使用例

目次フレーム最高レベルのエラー報告活発なコミュニティとチーム冗談モカ推奨プラグインVue テストライ...

MySQL での GROUP_CONCAT の使用例の分析

この記事では、例を使用して、MySQL で GROUP_CONCAT を使用する方法について説明しま...

Docker ネットワークの原理とカスタム ネットワークの詳細な分析

Docker はホストマシン上のブリッジを仮想化します。コンテナを作成して起動すると、各コンテナには...

WindowsでcmdからDOSウィンドウに入り、MySQLデータベースにアクセスします。

1. win + R を押して cmd と入力し、DOS ウィンドウに入ります。 2. MySQL...

Chromeの最小フォントサイズ制限12pxに対する最終的な解決策

ウェブサイトを作成するユーザーの多くが、このような問題に遭遇すると思います。Chrome のデフォル...

mysql 8.0.19 winx64.zip インストール チュートリアル

この記事は参考までにmysql 8.0.19 winx64.zipのインストールチュートリアルを記録...

権限の問題によりMySQLの設定ファイルmy.cnfを起動できない問題の解決方法

この記事では、権限の問題により MySQL 構成ファイル my.cnf を起動できない場合の関連する...

MySQL はエンタープライズレベルのログ管理、バックアップ、リカバリの実践的なチュートリアルを実装します

背景事業が発展するにつれ、会社の事業内容や規模は拡大し続け、ウェブサイトには大量のユーザー情報やデー...

Linux での Docker のインストールと展開の例

以下の記事を読んだ後、プロジェクトをサーバーにデプロイできます。Tomcat、JDK、MySQL な...

言及すべき8つのMySQLの落とし穴を共有する

MySQL はインストールが簡単で、高速で、豊富な機能を備えています。これはオープンソース運動のベン...