Node.js가 성능이 더 좋아 사용하는 모습을 자주 볼 수 있으므로 이번 글에서는 자세히 설명하겠습니다.
Node.js는 단일 프로세스 단일 스레드 애플리케이션이지만 이벤트와 콜백을 통해 동시성을 지원하므로 성능이 매우 높습니다.
Node.js의 모든 API는 비동기식이며 독립적인 스레드로 실행되고 비동기 함수 호출을 사용하며 동시성을 처리합니다.
Node.js 기본적으로 모든 이벤트 메커니즘은 디자인 패턴에서 관찰자 패턴을 사용하여 구현됩니다.
Node.js 단일 스레드는 이벤트 관찰자가 종료되지 않을 때까지 while(true) 이벤트 루프를 입력하는 것과 유사합니다. 이벤트가 발생하면 콜백 함수가 호출됩니다.
Node.js는 이벤트 중심 모델을 사용합니다. 웹 서버는 요청을 받으면 요청을 닫고 처리한 후 다음 웹 요청을 처리합니다.
이 요청이 완료되면 다시 처리 대기열로 들어가고, 대기열의 시작 부분에 도달하면 결과가 사용자에게 반환됩니다.
이 모델은 웹 서버가 읽기 또는 쓰기 작업을 기다리지 않고 항상 요청을 수락하기 때문에 매우 효율적이고 확장 가능합니다. (이것을 Non-Blocking IO 또는 Event-Driven IO라고도 합니다.)
Event-Driven 모델에서는 이벤트를 수신하기 위해 메인 루프가 생성되고, 이벤트가 감지되면 콜백 함수가 트리거됩니다.
전체 이벤트 중심 프로세스는 이러한 방식으로 매우 간단하게 구현됩니다. 옵저버 패턴과 다소 유사하며, 이벤트는 주체(Subject)와 동일하며, 이 이벤트에 등록된 모든 핸들러 함수는 옵저버(Observer)와 동일합니다.
Node.js에는 아래와 같이 이벤트 모듈을 도입하고 EventEmitter 클래스를 인스턴스화하여 이벤트를 바인딩하고 수신할 수 있습니다.
// 引入 events 模块var events = require('events');// 创建 eventEmitter 对象var eventEmitter = new events.EventEmitter(); 以下程序绑定事件处理程序: // 绑定事件及事件的处理程序eventEmitter.on('eventName', eventHandler); 我们可以通过程序触发事件: // 触发事件eventEmitter.emit('eventName');
Instance
main.js 파일을 생성합니다. 코드는 다음과 같습니다. 다음과 같이 표시:
// 引入 events 模块var events = require('events');// 创建 eventEmitter 对象var eventEmitter = new events.EventEmitter();// 创建事件处理程序var connectHandler = function connected() { console.log('连接成功。'); // 触发 data_received 事件 eventEmitter.emit('data_received');}// 绑定 connection 事件处理程序eventEmitter.on('connection', connectHandler); // 使用匿名函数绑定 data_received 事件eventEmitter.on('data_received', function(){ console.log('数据接收成功。');});// 触发 connection 事件 eventEmitter.emit('connection');console.log("程序执行完毕。");
다음으로 위 코드를 실행해 보겠습니다.
$ node main.js 연결이 성공했습니다. 데이터가 성공적으로 수신되었습니다. 프로그램 실행이 완료되었습니다.
노드 애플리케이션은 어떻게 작동하나요?
노드 애플리케이션에서 비동기 작업을 수행하는 함수는 콜백 함수를 마지막 매개변수로 받고, 콜백 함수는 오류 객체를 첫 번째 매개변수로 받습니다.
다음으로 이전 예제를 다시 살펴보고 input.txt를 생성해 보겠습니다. 파일 내용은 다음과 같습니다.
초보 튜토리얼 공식 웹사이트 주소: www.runoob.com
main.js 생성
var fs = require("fs");fs.readFile('input.txt', function (err, data) { if (err){ console.log(err.stack); return; } console.log(data.toString());});console.log("程序执行完毕");
위에서는 Node.js의 사용법을 자세히 소개하고 있습니다. 더 많은 관련 지식을 알고 싶다면 php 중국어 사이트를 주목해주세요.
관련 권장 사항:
위 내용은 Node.js 타임 루프 사용 정보의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!