Heim > Web-Frontend > js-Tutorial > Hauptteil

Eine ausführliche Analyse der integrierten Module in Node.js

青灯夜游
Freigeben: 2021-07-01 10:46:04
nach vorne
1950 Leute haben es durchsucht

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.

Eine ausführliche Analyse der integrierten Module in Node.js
Node.js-Architekturdiagramm

Eingebaute Module

Eine ausführliche Analyse der integrierten Module in Node.js

Einige Kastanien

  • Dateisystem API für Betriebsdateien
  • Prozess Einige Datensätze von. Node.j s Prozesse Informationen
  • OS Betriebssystembezogene API
    • os.arch() Ruft die Architekturinformationen des Betriebssystems ab
    • os.cpus() Ruft die CPU- und Kernel-bezogenen Informationen des Betriebssystems ab

[Empfohlenes Lernen: „nodejs Tutorial"]

Node.js integrierter Modulbetriebsmechanismus

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 internalBindinginternalBinding 调用底层 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();
});
Nach dem Login kopieren

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;
Nach dem Login kopieren
// buy.js
const geekTime = require("./index.js");

geekTime.addListener("newLesson", (res) => {
  console.log("有新课了!!", res.price);
  if (res.price < 80) {
    console.log("价格小于80,买买买!");
  }
});
Nach dem Login kopieren

Eingebaute Module rufen den 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)

In einigen Fällen werden die Daten nicht über den Node.js-Quellcode aufgerufen, sondern direkt durch Das zugrunde liegende Betriebssystem benachrichtigt den Node.js-Code, um etwas zu tun, wie zum Beispiel: EventEmitter

Chestnutrrreee🎜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🎜

Ereignis-Listener-Anwendungsszenario🎜🎜Verwenden Sie das Beobachtermuster, um das Problem der Kommunikation zwischen mehreren Modulobjekten zu lösen🎜rrreeerrreee🎜🎜Node.js Chestnut: 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!

Verwandte Etiketten:
Quelle:juejin.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage