Durch das Studium und die Anwendung von Node wissen wir, dass NodeJS Single-Thread-, ereignisgesteuerte, nicht blockierende E/A- und andere Architekturdesigns verwendet, die sich sehr gut für Anwendungen mit hoher Parallelität und E/A-Intensität eignen. 1. Was ist ereignisgesteuert?Ereignisgesteuert bedeutet vereinfacht ausgedrückt, Änderungen des Ereignisstatus mithilfe wirksamer Methoden zu überwachen und bei Änderungen entsprechende Maßnahmen zu ergreifen. Um dies zu verstehen, verwenden wir ein Szenario aus dem täglichen Leben: Wenn wir in ein Restaurant gehen, um zu essen und Essen zu bestellen, teilt uns der Kellner nach der Bestellung die Bestellnummer mit (dies kann als Registrierung eines Ereignisses verstanden werden) und wir setzen uns und warten. Zu diesem Zeitpunkt hören unsere Ohren immer auf die Rufnummer des Kellners, und wenn unser Name aufgerufen wird, können wir zur Rezeption gehen, um das Essen abzuholen. 2. EreignismodellDie Ereignisarchitektur von NodeJS verwendet das klassische Abonnement-Veröffentlichungsmodell Der Abonnement- und Veröffentlichungsmodus, auch als Nachrichtenmechanismus bekannt, definiert eine Abhängigkeitsbeziehung, die so verstanden werden kann, dass 1 bis N (mehrere oder einzelne) Beobachter gleichzeitig die entsprechenden Statusänderungen eines Objekts überwachen. Sobald eine Änderung eintritt, werden alle Beobachter benachrichtigt, wodurch die entsprechenden von den Beobachtern registrierten Ereignisse ausgelöst werden. Dieses Entwurfsmuster löst die funktionale Kopplung zwischen dem Hauptobjekt und dem Beobachter. 3. VeranstaltungsmodulDas Ereignismodul ist ein sehr wichtiges Modul in NodeJS. Die meisten Modulimplementierungen in Node erben die Ereignisklasse, wie z. B. fs, http, net usw. Es stellt ein Objekt events.EventEmitter bereit. Der Kern von EventEmitter ist die Ereignisemission und der Ereignislistener. Einfache Anwendung: importiere { EventEmitter } von 'Ereignisse'; Klasse MyEmiter erweitert EventEmiter{}; const myEmitter = neuer MyEmitter(); myEmitter.on('hallo', () => { console.log('Hallo, jemand ruft dich an'); }); myEmitter.emit('hallo'); 4. Kern-API des Ereignismoduls4.1 eventEmitter.on(Ereignisname, Rückruf) Registrieren von Listener-Ereignissen Parameter: eventName: Ereignisname callback: Rückruffunktion, die aufgerufen wird, wenn das Ereignis ausgelöst wird 4.2 eventEmitter.once(Ereignisname, Rückruf) Es ist möglich, einen Listener zu registrieren, der für ein bestimmtes Ereignis höchstens einmal aufgerufen wird. Sobald das Ereignis ausgelöst wird, wird der Listener abgemeldet und dann aufgerufen. Parameter: eventName: Ereignisname callback: Rückruffunktion, die aufgerufen wird, wenn das Ereignis ausgelöst wird 4.3 eventEmitter.emit(Ereignisname[, ...Argumente]) Das angegebene Abhörereignis auslösen Parameter: eventName: Ereignisname args ist ein optionaler Parameter, der der Reihe nach an die Rückruffunktion übergeben wird; 4.4 eventEmitter.removeListener(Ereignisname, Rückruf) Entfernt den Listener des angegebenen Ereignisses. Hinweis: Der Listener muss registriert sein. Andernfalls ist es ungültig. Parameter: eventName: Ereignisname Rückruf: Rückruffunktion 4.5 EventEmitter.removeAllListeners(Ereignisname) Alle Listener entfernen. Ein Ereignis kann mehrere Listener haben. Diese Methode kann verwendet werden, wenn alle Listener entfernt werden müssen. Parameter: eventName: der Name des Ereignisses, das entfernt werden muss; Es ist zu beachten, dass alle Überwachungsereignisse entfernt werden, wenn keine Parameter übergeben werden. Dies ist ziemlich heftig und sollte mit Vorsicht verwendet werden. 4.6 EventEmitter.listeners(Ereignisname) Gibt eine Kopie des Arrays der Listener-Binding-Callbackfunktionen für das Ereignis mit dem Namen eventName zurück. 4.7 EventEmitter.eventNames() Gibt ein Array zurück, das die Ereignisse auflistet, für die der Trigger Listener registriert hat. 4.8 EventEmitter.setMaxListeners(n) Standardmäßig gibt ein EventEmitter eine Warnung aus, wenn für ein bestimmtes Ereignis mehr als 10 Listener hinzugefügt werden. Mit der Methode emitter.setMaxListeners() können Sie den Grenzwert für diese bestimmte EventEmitter-Instanz ändern. Dieser Wert kann auf Unendlich (oder 0) gesetzt werden, um eine unbegrenzte Anzahl von Zuhörern anzuzeigen. 5. Synchrone und asynchrone ProblemeDer EventEmitter ruft alle Listener synchron in der Reihenfolge auf, in der sie registriert wurden. Dadurch wird die korrekte Reihenfolge der Ereignisse sichergestellt und es werden Race Conditions und logische Fehler vermieden. 6. FehlerbehandlungWenn in einer EventEmitter-Instanz ein Fehler auftritt, besteht die typische Aktion darin, ein „Fehler“-Ereignis auszugeben. Diese werden in Node.js als Sonderfälle behandelt. Wenn der EventEmitter nicht mindestens einen Listener für das „Fehler“-Ereignis registriert hat und das „Fehler“-Ereignis ausgegeben wird, wird der Fehler ausgegeben, der Stapelüberwachungscode gedruckt und der Node.js-Prozess beendet. Als bewährte Methode sollten Sie immer einen Listener für das Ereignis „Fehler“ hinzufügen. importiere { EventEmitter } von 'Ereignisse'; Klasse MyEmiter erweitert EventEmiter{}; const myEmitter = neuer MyEmitter(); myEmitter.on('hallo', () => { console.log('Hallo, jemand ruft dich an'); }); myEmitter.on('Fehler', (e) => { console.log(e) }) myEmitter.emit('hallo'); myEmitter.emit('Fehler', neuer Fehler('ein Fehler ist aufgetreten')) Dies ist das Ende dieses Artikels über die Wissenspunkte des Ereignismoduls in Node.js. Weitere Inhalte zum Ereignismodul in Node.js finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Grundlegendes Handbuch für Webdesign 216 Websichere Farben
>>: Probleme mit dem benannten Mount und dem anonymen Mount des Docker-Container-Datenvolumens
Wie unten dargestellt: XML/HTML-CodeInhalt in die...
Nachdem ich MySQL über Ports installiert hatte, s...
Als ich die CPP-Datei zum ersten Mal mit G++ komp...
Inhaltsverzeichnis 1. Einfaches Seitenbeispiel 2....
Vielen Leuten wird das Kompilieren erklärt, sobal...
Wenn eine Spalte in einer Datentabelle einmal als...
Vorne geschrieben Nginx ist nicht nur ein Reverse...
Ich habe kürzlich an mehreren virtuellen Maschine...
1. Einspaltiger Index Die Auswahl der Spalten, fü...
Frage: Vor kurzem traten bei der Bereitstellung d...
Inhaltsverzeichnis 2. Stapelanalyse mit pt-pmap 3...
Hier sind einige Beispiele, wie ich diese Eigensch...
Inhaltsverzeichnis 1. Server 2. Kunde 3. Testdien...
Über wen Zeigt die am System angemeldeten Benutze...
In diesem Artikel wird der spezifische Code von B...