우선 Node.Js가 무엇인지 이해하려고 시도합니다. 두 가지 질문이 있습니다.
Node.js의 단일 스레드 및 이벤트 루프
첫 번째 질문은 펠릭스의 the article에서, 그것은 "그 콜백 실행이 완료 될 때까지 단지 다른 모든 콜백이 줄을 기다려야한다. 동시에 발사 한 콜백이있을 수있다"고 말했다.
- 먼저 HTTP 요청 이벤트를 수신 :
그런 다음, 두 개의 클라이언트 요청이 동시에 수신하는 경우, 그것은 다음과 같은 워크 플로우를 의미
var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(8124, "127.0.0.1");
(공식 웹 사이트 nodejs에서 복사) 다음 코드에 대한 고려 , 두 번째 요청 이벤트가 수신되었습니다.
- 첫 번째 이벤트가 수신되자 마자 첫 번째 이벤트의 콜백 기능이 실행 중입니다.
- 두 번째 이벤트에 대한 콜백 함수가 대기해야합니다.
맞습니까? 내가 옳다면, 어떻게 Node.js 매우 짧은 시간 내에 클라이언트 요청의 수천이 있다면 제어 할 수 있습니다.
두 번째 질문
용어 "이벤트 루프는"대부분 Node.js를 주제로 사용된다. 나는 "이벤트 루프"를 다음과 같이 이해했다. http://www.wisegeek.com/what-is-an-event-loop.htm;
이벤트 루프 - 또는 주 루프는 이 초기 이벤트 다음에 이벤트를 제어하고 전달하는 프로그램 내의 구성입니다.
초기 이벤트가 키보드의 버튼을 누르거나 Node.js를에 (프로그램의 버튼을 클릭 포함하여 아무 것도, 할 수있다, 나는 초기 이벤트는 HTTP 요청, DB 쿼리 또는 I/O 파일 될 것이라고 생각 접속하다).
이 이벤트 서클 때문이 아니라, 루프를 불러 지속적으로 발생하지만 루프가 이벤트를 준비 때문에,의 이벤트를 확인하는 이벤트를 전달하고 다시 한번 과정을 반복한다.
나는 "다시 한번 과정을 반복 "두 번째 단락에 대한 충돌, 특히 문구가 있습니다. 위의 질문에서 위의 http.createServer 코드가 반복적으로 HTTP 요청 이벤트를 수신하기 때문에 절대적으로 "이벤트 루프"라는 것을 인정했습니다.
하지만 다음 코드를 이벤트 구동 또는 이벤트 루프로 식별하는 방법을 알지 못합니다. db 쿼리가 끝난 후에 발생하는 콜백 함수를 제외하고는 아무것도 반복하지 않습니다.
database.query("SELECT * FROM table", function(rows) {
var result = rows;
});
제발, 당신의 의견과 대답을 들려주세요.
'createServer'에 콜백 (비동기) 연산이 있으면 어떻게 될까요? 먼저 요청하면 프로세스가 일부 동기화 작업에서 콜백을 트리거하고 즉시 처리 할 수 있습니까? 그리고 첫 번째 요청에서 콜백이 실행되는 동안 두 요청을 처리 시작? – Manali