nodejs 서버 쉽게 만들기(9): 비차단 작업 실현
우리 먼저 서버에 대해.js 수정:
var http = require("http");
var url = require("url");
function start(route, handle) {
function onRequest(request, response) {
var pathname = url.parse(request.url).pathname;
console.log("Request for " + pathname + " received.");
route(handle, pathname, response);
}
http.createServer(onRequest).listen(8888);
console.log("Server has started.");
}
exports.start = start;
우리는 response 대상을 세 번째 매개 변수로 루트 () 함수에 전달하고, onRequest () 처리 프로그램에서 response와 관련된 모든 함수 변조를 제거합니다. 왜냐하면 이 부분은route () 함수로 완성되기를 원하기 때문입니다.다음은 라우터를 수정합니다.js:
function route(handle, pathname, response) {
console.log("About to route a request for " + pathname);
if (typeof handle[pathname] === 'function') {
handle[pathname](response);
} else {
console.log("No request handler found for " + pathname);
response.writeHead(404, {"Content-Type": "text/plain"});
response.write("404 Not found");
response.end();
}
}
exports.route = route;
같은 모드: 이전에 요청 처리 프로그램에서 되돌아오는 값을 가져온 것에 비해 이번에는 response 대상을 직접 전달합니다.요청이 처리되지 않으면 "404"오류로 돌아갑니다.다음은 requestHandler를 수정합니다.js:
var exec = require("child_process").exec;
function start(response) {
console.log("Request handler 'start' was called.");
exec("ls -lah", function (error, stdout, stderr) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write(stdout);
response.end();
});
}
function upload(response) {
console.log("Request handler 'upload' was called.");
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello Upload");
response.end();
}
exports.start = start;
exports.upload = upload;
우리의 처리 프로그램 함수는 요청에 대한 직접적인 응답을 위해response 파라미터를 받아야 합니다.start 프로세서는 exec () 의 익명 리셋 함수에서 응답을 요청하는 동작을 하고, upload 프로세서는 "Hello World"에 간단한 답장을 합니다. 이번에는response 대상을 사용할 뿐입니다./start 프로세서에서 소모되는 작업이/upload 요청에 대한 즉각적인 응답을 막지 않는다는 것을 증명하려면 requestHandlers를 사용하십시오.js는 다음과 같이 수정되었습니다.
var exec = require("child_process").exec;
function start(response) {
console.log("Request handler 'start' was called.");
exec("find /",
{ timeout: 10000, maxBuffer: 20000*1024 },
function (error, stdout, stderr) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write(stdout);
response.end();
}
);
}
function upload(response) {
console.log("Request handler 'upload' was called.");
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello Upload");
response.end();
}
exports.start = start;
exports.upload = upload;
이렇게 되면http://localhost:8888/start요청할 때 10초가 걸립니다http://localhost:8888/upload이 때에도/start 응답은 처리 중입니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Node.js를 AWS서버에서 사용하는 실습간단한 예제와 함께 AWS에서 Node.js를사용하는 법을 배워보도록 하겠다. 해당 github에 있는 레포지토리로 사용을 할 것이다. 3000번 포트로 Listen되는 예제이고 간단히 GET, POST, DELET...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.