node의 막힘과 비막힘
var exec = require('child_process').exec;
function start() {
console.log('do start');
// function sleep(seconds) {
// var startTime = new Date().getTime();
// while(new Date().getTime() < startTime + seconds);
// }
// sleep(10000);
var content ="empty";
exec('find',function (error,stdout,stderr) {
content = stdout;
})
return content;
}
function upload() {
console.log('do upload');
return 'upload';
}
exports.start = start;
exports.upload = upload;
도입 child_프로세스 모듈의exec 방법은 하위 프로세스를 열어 다른 프로그램을 실행할 수 있습니다
여기에서 비차단 작업을 하기 위해exec()는 리셋 함수를 호출했습니다. 이것은 exec와spawn 방법의 차이를 잘 설명하는 링크입니다. 상기 코드에서 코드는 동기적으로 실행되고 exec()를 호출한 후node를 의미합니다.js는 return content를 즉시 실행합니다. 이 때 content는 "empty"입니다. exec () 에 전달된 리셋 함수가 실행되지 않았습니다. exec () 작업이 비동기적이기 때문입니다
응용 프로그램은 각 층 간의 전달 값을 응용하는 방식(요청 처리 프로그램 -> 요청 루트 -> 서버)을 통해 요청 처리 프로그램이 되돌아오는 내용을 http 서버에 전달할 수 있다.다음에 우리는 다음과 같은 새로운 실현 방식을 채택한다. 상대적으로 내용을 서버에 전달하는 방식을 채택하고 우리는 이번에 서버가 내용을 전달하는 방식을 채택한다.response 대상 (서버의 리셋 함수 onRequest () 에서 가져오기) 이 요청 루트를 통해 요청 처리 프로그램에 전달된다는 것입니다.그 다음에 처리 프로그램은 이 대상의 함수를 채택하여 요청에 상응하도록 할 수 있다
sever.js
var http = require('http');
var url =require('url');
function start(route,handle) {
function onRequest(request,response) {
var pathname = url.parse(request.url).pathname;
if (pathname === '/favicon.ico') {
}else{
response.writeHead(200,{'Content-Type':'text/plain'});
route(handle,pathname,response);
// var content = route(handle,pathname,response);
// response.write(content);
// response.end();
}
}
http.createServer(onRequest).listen(80);
console.log('server running at 80');
}
exports.start = start;
route() , response route() , , onRequest() response , route()
router.js
function route(handle,pathname,response) {
if (typeof handle[pathname] ==='function') {
return handle[pathname](response);
}else{
console.log('no request'+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('do start');
exec('ipconfig',{encoding:"gbk",timeout:10000,maxBuffer:20000*1024},function (error,stdout,stderr) {
response.writeHead(200,{"Content-Type":"text/plain;charset:utf-8"});
response.write(stdout);
response.end();
})
}
function upload(response) {
console.log('do upload');
response.writeHead(200,{"Content-Type":"text/plain"});
response.write('this command is upload');
response.end();
}
exports.start = start;
exports.upload = upload;
위에서 엔코딩:'gbk'가 추가되지 않으면 브라우저 인코딩이 엉망입니다.node.js 기본 인코딩은utf-8입니다.만약encoding: "xxx"xxx가 식별되지 않으면 버퍼로 전환됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.