Dieser Artikel führt Sie durch die integrierten Module in Node.js, wirft einen Blick auf den Funktionsmechanismus der integrierten Module von Node.js und stellt EventEmitter (Beobachtermodus) anhand von Beispielen kurz vor.
Node.js-Architekturdiagramm
Einige Kastanien
[Empfohlenes Lernen: „nodejs Tutorial"]
Durch Node.js-Quellcode-Analyse
Der Code der Anwendungsschicht ruft das Node.js-Modul auf
Das Node.js-Modul ruft das zugrunde liegende auf C++-Modul über internalBinding
internalBinding
调用底层 C++ 模块
lib 文件夹下存放 Node 的内置模块
内置模块通过调用 internalBinding
V8 层面的方法
internalBinding
在 src 目录下的 C++代码中
C++ 代码定义了一些底层方法,通过 V8 的接口导出供 Node 层面调用
最后 Node 层返回给应用层
EventEmitter
(观察者模式)有些情况下 数据不是通过 Node.js 源代码调用的, 而是直接通过操作系统底层 通知到 Node.js 代码去做一些事情,比如: EventEmitter
process.stdin.on("data", (e) => { const playerAction = e.toString().trim(); });
on
事件的原理是 使用 Class: EventEmitter
来实现的
EventEmitter 就可以把底层发生的一些变化, 比如接收一个鼠标事件,传递到应用层来,让开发者可以做相应的操作
用观察者模式 来解决多个模块对象之间通信的问题
// index.js const EventEmitter = require("events").EventEmitter; class GeekTime extends EventEmitter { constructor() { super(); setInterval(() => { this.emit("newLesson", { price: Math.random() * 100 }); }, 3000); } } const geekTime = new GeekTime(); module.exports = geekTime;
// buy.js const geekTime = require("./index.js"); geekTime.addListener("newLesson", (res) => { console.log("有新课了!!", res.price); if (res.price < 80) { console.log("价格小于80,买买买!"); } });
EventEmitter
auf internalBinding
V8-Level-Methode internalBinding
Im C++-Code im src-Verzeichnis definiert der C++-Code einige zugrunde liegende Methoden, die über die V8-Schnittstelle exportiert werden, damit die Knotenschicht sie aufruft . Anwendungsschicht
EventEmitter
(Beobachtermodus)on code> event Das Prinzip besteht darin, <a href="https://nodejs.org/docs/latest-v13.x/api/events.html" target="_blank" rel="nofollow noopener noreferrer"> <code zu verwenden>Klasse: EventEmitter
🎜 implementiert durch 🎜🎜EventEmitter kann einige Änderungen, die auf der untersten Ebene auftreten, z. B. den Empfang eines Mausereignisses, an die Anwendungsebene übergeben, sodass Entwickler entsprechende Vorgänge ausführen können🎜EventEmitter
🎜🎜🎜Browser Chestnut – addEventListener – RemoveEventListener🎜🎜🎜Observer-Muster und Veröffentlichung -Der Unterschied zwischen dem Abonnementmodell🎜🎜Publish-Subscribe-Modell besteht darin, dass die Registrierung und Auslösung von Ereignissen auf einer von beiden Parteien unabhängigen Plattform eines Drittanbieters erfolgt. JS-Implementierung – Rückruffunktion
Beobachtermuster: Verlage erreichen Abonnenten direkt. JS-Implementierungsmethode – Ereignisse auslösen🎜🎜Sie können sich auf🎜diesen Artikel über Designmuster beziehen – Nuggets-Broschüre🎜🎜🎜Weitere Kenntnisse zum Programmieren finden Sie unter: 🎜Programmiervideo🎜! ! 🎜
Das obige ist der detaillierte Inhalt vonEine ausführliche Analyse der integrierten Module in Node.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!