> 웹 프론트엔드 > JS 튜토리얼 > Node.js에 내장된 모듈에 대한 심층 분석

Node.js에 내장된 모듈에 대한 심층 분석

青灯夜游
풀어 주다: 2021-07-01 10:46:04
앞으로
1985명이 탐색했습니다.

이 글에서는 Node.js에 내장된 모듈을 살펴보고 Node.js 내장 모듈의 작동 메커니즘을 살펴보고 예제를 통해 EventEmitter(관찰자 모드)를 간략하게 소개합니다.

Node.js에 내장된 모듈에 대한 심층 분석
Node.js 아키텍처 다이어그램

내장 모듈

Node.js에 내장된 모듈에 대한 심층 분석

일부 밤

  • 파일 시스템 운영 파일용 API
  • Process Node.js 프로세스의 일부 기록 정보
  • OS 운영체제 관련 API
    • os.arch() 운영체제의 아키텍처 정보를 가져옵니다
    • os.cpus() 운영체제 CPU 및 커널 관련 정보를 가져옵니다

[추천 학습: "nodejs tutorial"]

Node.js 내장 모듈 작동 메커니즘

Node.js 소스 코드 분석을 통해

  • 애플리케이션 계층 코드는 Node.js 모듈을 호출합니다

  • Node.js 모듈은 기본 모듈을 호출합니다. internalBinding을 통한 C++ 모듈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,买买买!");
  }
});
로그인 후 복사

내장 모듈은 를 호출합니다 InternalBinding V8 레벨 메소드

internalBinding src 디렉토리의 C++ 코드에서 C++ 코드는 노드 레이어가 호출할 수 있도록 V8 인터페이스를 통해 내보내지는 몇 가지 기본 메소드를 정의합니다. . 애플리케이션 레이어

EventEmitter(관찰자 모드)

Node.js 소스 코드를 통해 데이터가 호출되지 않는 경우도 있지만, 기본 운영 체제는 Node.js 코드에 EventEmitter

Chestnutrrreee🎜on 과 같은 작업을 수행하도록 알립니다. code> 이벤트 <a href="https://nodejs.org/docs/latest-v13.x/api/events.html" target="_blank" rel="nofollow noopener noreferrer"> <code>를 사용하는 것이 원칙입니다. >클래스: EventEmitter 🎜 🎜🎜EventEmitter로 구현된 EventEmitter는 마우스 이벤트 수신과 같은 하위 계층에서 발생하는 일부 변경 사항을 애플리케이션 계층에 전달할 수 있으므로 개발자가 해당 작업을 수행할 수 있습니다🎜

이벤트 리스너 적용 시나리오🎜🎜관찰자 패턴을 사용하여 여러 모듈 객체 간의 통신 문제 해결🎜rrreeerrreee🎜🎜Node.js 밤나무: EventEmitter 🎜🎜🎜Browser 밤나무 - addEventListener - 제거EventListener🎜🎜🎜Observer 패턴 및 게시 -구독 모델🎜🎜게시-구독 모델의 차이점은 이벤트 등록 및 트리거가 양 당사자와 독립적인 제3자 플랫폼에서 발생한다는 것입니다. JS 구현 - 콜백 함수 관찰자 패턴: 게시자는 구독자에게 직접 연락합니다. JS 구현 방법 - 이벤트 발생🎜🎜이 디자인 패턴 기사🎜를 참조할 수 있습니다 - Nuggets Booklet🎜🎜🎜더 많은 프로그래밍 관련 지식을 보려면 🎜프로그래밍 비디오🎜를 방문하세요! ! 🎜

위 내용은 Node.js에 내장된 모듈에 대한 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:juejin.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿