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. イベントモジュールコアAPI4.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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: ウェブデザイン必携ハンドブック 216 ウェブセーフカラー
>>: Docker コンテナ データ ボリュームの名前付きマウントと匿名マウントの問題
問題の説明:最近、rsyncで毎回同期するデータ量が多いが、データベースのbakファイルを保持する必...
実際の業務では、Excel からデータベースにデータをインポートする必要がある場合があります。データ...
矢印関数は ES6 の新機能です。独自の this はありません。その this ポイントは外部のコ...
フロントエンド プロジェクトでは、添付ファイルのアップロードは非常に一般的な機能であり、ほぼすべての...
目次if判定の最適化1. 最も簡単な方法:判断2. より良い方法: スイッチ3. より良いアプローチ...
Firefox、Opera、その他のブラウザは Webdings フォントをサポートしていません。回...
日々の運用・保守作業において、MySQL データベースのバックアップは重要です。ウェブサイトにとって...
ページを更新せずにフォーム送信を実装するために Ajax を使用することは、プロジェクトでよく使用さ...
目次VARCHAR 型と CHAR 型結論: VARCHAR 型と CHAR 型VARCHAR と ...
序文今日、自作のコンポーネントを使っていたところ、突然、長い間忘れていたバブリングイベントに遭遇しま...
目次序文ブラウザJS非同期実行の原理ブラウザのイベントループ実行スタックとタスクキューマクロタスクと...
序文コンピュータの数値は浮動小数点であるため、計算プロセス中に取得されるデータは通常正確ではなく、そ...
目次1. 遅延読み込みとは何ですか? 2. 遅延読み込みを実装する🌄: 2.1 最初の方法: 2.2...
clear:both清除浮動これは私が常に持っていた印象ですが、私はこれをめったに使用せず、私の理...
概要プロジェクトは正常に作成され、正常にデプロイされましたが、以下に示すように、Tomcat サーバ...