node.js를 처음 사용하기 때문에 setTimeout을 사용하여 긴 연결을 시뮬레이트하고 비동기 적으로 작동하도록 노력했습니다.node.js에서 비동기 적으로 setTimeout을 사용하는 방법
var http = require('http');
http.createServer(function (request, response) {
console.log('New request @ ' + request.url);
(function (response) {
setTimeout(function() {
console.log('Time is up');
response.writeHead(200, {"Content-Type": "text/plain"});
response.end('Hello World\n');
}, 3000);
})(response);
}).listen(8124);
console.log('Server running at http://127.0.0.1:8124/');
그러나, 위의 코드는 단 3 초마다 한 요청을 처리 할 수있는 동기 단일 스레드 응용 프로그램처럼 수행합니다.
node.js의 모든 내용이 비동기 적으로 작동해야한다고 생각했습니다. 그럼 여기서 뭐가 문제 야?
나는 ab로 테스트를했는데 맞다. setTimeout은 비동기 함수이다. Chrome에서 동시에 여러 탭을 열면 5 초 간격으로 하나씩 끝납니다. – Jack
크롬에서 탭 사이를 빠르게 누르는 것이 충분하지 않다고 생각합니다. :) – balazs
크롬이 동일한 URL을 동시에 요청하지 않습니다. URL에 대안 페이지를 추가하면 (예 : 첫 번째 탭은 http://127.0.0.1:8124/0를 요청하고 두 번째 탭은 http://127.0.0.1:8124/1 등을 요청합니다. 그런 다음 예상대로 작동해야합니다. http://stackoverflow.com/questions/15852011/why-settimeout-blocks-eventloop을 참조하십시오. – Jason