node.js 이벤트 순환 자세히 알 아 보기

Node.js 는 단일 프로 세 스 단일 스 레 드 응용 프로그램 이지 만 V8 엔진 이 제공 하 는 비동기 실행 리 셋 인터페이스 로 이 인 터 페 이 스 를 통 해 대량의 병행 을 처리 할 수 있 기 때문에 성능 이 매우 높다.
Node.js 는 거의 모든 API 가 리 셋 함 수 를 지원 합 니 다.
Node.js 는 기본적으로 모든 사건 체 제 는 디자인 모델 에서 관찰자 모델 로 이 루어 진다.
Node.js 단일 스 레 드 는 while(true)의 이벤트 순환 에 들 어 가 는 것 과 유사 합 니 다.이벤트 관찰자 가 종료 되 지 않 을 때 까지 모든 비동기 사건 은 하나의 이벤트 관찰 자 를 생 성 합 니 다.이벤트 가 발생 하면 이 반전 함 수 를 호출 합 니 다.
이벤트 드라이버
Node.js 는 이벤트 구동 모델 을 사용 하여 웹 서버 가 요청 을 받 으 면 닫 고 처리 한 다음 다음 다음 웹 요청 을 서비스 합 니 다.
이 요청 이 완료 되면 처리 대기 열 에 다시 놓 여 있 습 니 다.대기 열 에 도착 하면 이 결 과 는 사용자 에 게 되 돌아 갑 니 다.
이 모델 은 매우 효율 적 이 고 확장 성 이 매우 강하 다.웹 서버 가 요청 을 받 아들 여 읽 기와 쓰기 동작 을 기다 리 지 않 기 때문이다.(이것 은 비 차단 식 IO 또는 이벤트 구동 IO 라 고도 부른다)
이벤트 구동 모델 에 서 는 이벤트 가 감지 되 었 을 때 리 셋 함 수 를 실행 하 는 주 순환 을 생 성 합 니 다.

전체 사건 구동 의 절 차 는 바로 이렇게 실현 되 고 매우 간결 하 다.관찰자 모드 와 유사 합 니 다.이 벤트 는 하나의 주제(Subject)에 해당 하 며,이 이벤트 에 등 록 된 모든 처리 함 수 는 관찰자(Observer)에 해당 합 니 다.
Node.js 는 여러 개의 내 장 된 이벤트 가 있 습 니 다.이벤트 모듈 을 도입 하고 EventEmitter 류 를 통 해 이 벤트 를 연결 하고 감청 할 수 있 습 니 다.다음 과 같은 실례 가 있 습 니 다.

//    events   
var events = require('events');
//    eventEmitter   
var eventEmitter = new events.EventEmitter();
다음 프로그램 바 인 딩 이벤트 처리 프로그램:

//             
eventEmitter.on('eventName', eventHandler);
우 리 는 프로그램 을 통 해 사건 을 촉발 할 수 있다.

//     
eventEmitter.emit('eventName');
실례
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
연결 이 성공 하 였 습 니 다.
데이터 수신 성공.
프로그램 실행 완료.
Node 응용 프로그램 은 어떻게 작 동 합 니까?
Node 응용 프로그램 에서 비동기 작업 을 수행 하 는 함 수 는 리 셋 함 수 를 마지막 매개 변수 로 하고 리 셋 함 수 는 오류 대상 을 첫 번 째 매개 변수 로 받 습 니 다.
다음은 앞의 인 스 턴 스 를 다시 보고 input.txt 를 만 듭 니 다.파일 내용 은 다음 과 같 습 니 다.
우리
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("      ");
이상 프로그램 에서 fs.readFile()은 비동기 함수 로 파일 을 읽 는 데 사 용 됩 니 다.파일 을 읽 는 중 오류 가 발생 하면 err 대상 은 오류 정 보 를 출력 합 니 다.
오류 가 발생 하지 않 으 면 readFile 은 err 대상 의 출력 을 건 너 뛰 고 파일 내용 은 리 셋 함수 로 출력 합 니 다.
상기 코드 를 실행 합 니 다.실행 결 과 는 다음 과 같 습 니 다.
프로그램 실행 완료
우리
다음은 input.txt 파일 을 삭제 합 니 다.실행 결 과 는 다음 과 같 습 니 다.
프로그램 실행 완료
Error: ENOENT, open 'input.txt'
파일 input.txt 가 존재 하지 않 기 때문에 오류 정 보 를 출력 하 였 습 니 다.
이상 은 node.js 이벤트 순환 에 대한 상세 한 내용 입 니 다.node.js 이벤트 순환 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기