Node.js의 HTTP 모듈과 이벤트 모듈에 대한 자세한 설명

高洛峰
풀어 주다: 2016-12-26 10:01:46
원래의
1005명이 탐색했습니다.

Node.js용 http 서버

Node.js를 사용하면 HTTP 모듈의 하위 수준 API를 사용하여 서버와 클라이언트를 만들 수 있습니다. 처음 노드를 배우기 시작하면 다음 코드를 만나게 됩니다.

var http = require('http');
http.createServer(function (req,res) {
    res.end('Hello World\n');
}).listen(3000,"127.0.0.1");
console.log("Server funning at http://127.0.0.1:3000");
로그인 후 복사

이 코드에는 http 모듈에 대한 정보가 포함되어 있습니다.

1. Core는 HTTP 모듈을 요청하고 이후 스크립트에서 사용할 변수에 할당합니다.
그런 다음 스크립트는 `Node.js`를 통해 `HTTP`를 사용하기 위한 메서드에 액세스할 수 있습니다.

2. `createServer`를 사용하여 새 웹 서버 개체를 만듭니다.

3. 스크립트는 익명 함수를 서버에 전달하여 웹 서버 개체에 요청을 받을 때마다 무슨 일이 일어날지 알려줍니다. .What

4. 스크립트의 4번째 줄은 웹 서버의 포트와 호스트를 정의합니다. 즉, `http://127.0.0.1:3000`을 사용하여 서버에 액세스할 수 있습니다.

HTTP 헤더

모든 HTTP 요청 및 응답에 대해 HTTP 헤더는 콘텐츠 유형, 서버가 응답을 보낸 날짜 및 HTTP 상태 코드를 포함한 추가 정보를 보냅니다.

http 헤더에는 많은 정보가 포함되어 있습니다. 다음은 내 바이두 홈페이지에 포함된 http 헤더 정보입니다.

Node.js의 HTTP 모듈과 이벤트 모듈에 대한 자세한 설명

바이두 홈페이지에 더 많은 웹사이트가 추가되었습니다. , 여기의 데이터는 독자와 다를 수 있습니다. 이를 통해 Baidu의 웹 서버가 BWS/1.1임을 알 수 있습니다

다음은 위 코드의 http 헤더 정보입니다.

Node.js의 HTTP 모듈과 이벤트 모듈에 대한 자세한 설명

Node.js Redirection in node

Node에서는 방문자를 다른 웹페이지로 리디렉션하는 간단한 서버를 쉽게 만들 수 있습니다. 지침은 다음과 같습니다.

1. 고객에게 301 응답 코드를 보냅니다. 리소스가 다른 위치로 이동되었다는 클라이언트
2. 클라이언트에게 리디렉션할 위치를 알려주는 위치 헤더를 보냅니다.

해당 코드는 다음과 같습니다.

var http = require('http');
http.createServer(function (req,res) {
    res.writeHead(301,{
        'Location':'Http://example-2.com/web'
    });
    res.end();
}).listen(3000,'127.0.0.1');
console.log("Server funning at http://127.0.0.1:3000");
로그인 후 복사

브라우저를 열어 http://127.0.0.1:3000 페이지에 접속하시면 리디렉션됩니다.

다양한 요청에 응답

Node.js는 단일 응답을 생성할 수 있을 뿐만 아니라 여러 유형의 요청에 대해 애플리케이션에 몇 가지 경로를 추가해야 합니다. Node는 URL 모듈을 사용하여 이를 간단하게 만듭니다. URL 모듈을 사용하면 URL을 읽고 구문 분석한 다음 출력에 대해 작업을 수행할 수 있습니다.

var url = require('url');
var requestURL = "http://example.com:1234/path?query=string#hash"
로그인 후 복사

이제 요청된 URL을 분석하고 그 내용을 가로챌 수 있습니다. 예를 들어 호스트 이름을 얻으려면 다음을 입력하면 됩니다.

url.parse(requestURL).hostname
로그인 후 복사

이때, 그는 " example.com"을 반환합니다

포트 번호를 얻으려면 다음을 입력하세요:

url.parse(requestURL).port
로그인 후 복사

"1234"가 반환됩니다


이벤트 모듈

Node.js는 동시성을 달성하는 가장 좋은 방법으로 간주됩니다. 이벤트 모듈은 Node.js의 핵심이며 다른 많은 모듈에서 이벤트 관련 기능을 설계하는 데 사용됩니다. Node.js는 단일 스레드에서 실행되므로 모든 동기화 코드가 차단됩니다. 따라서 Node.js 코드를 작성할 때 고려해야 할 몇 가지 간단한 규칙이 있습니다:

1. 차단하지 마세요 - `Node.js`는 단일 스레드입니다. 코드가 다른 모든 것을 차단하면 중지됩니다.
2 . 빠른 반환 - 작업이 신속하게 반환되어야 합니다. 신속하게 반환할 수 없는 경우 다른 프로세스로 옮겨야 합니다.
개발자는 이벤트 모듈을 사용하여 이벤트에 대한 리스너와 핸들러를 설정할 수 있습니다. 클라이언트 js에서는 클릭 이벤트에 대한 리스너를 설정한 다음 이벤트가 발생할 때 작업을 수행할 수 있습니다.

var tar = document.getElementById("target");
tar.addEventListener("click", function () {
   alert("click event fired,target was clicked"); 
},false);
로그인 후 복사

물론 이는 IE 호환성을 고려하지 않은 예이며 Node .js 주요 이벤트는 다음과 같습니다. 보다 일반적인 네트워크 이벤트는 다음과 같습니다.

1. 웹 서버의 응답
2. 파일에서 데이터 읽기
3. 데이터베이스에서 데이터 반환
먼저 새 이벤트를 만들어야 합니다. EventEmitter 인스턴스:

var EventEmitter= require('events').EventEmitter;
var test = new EventEmitter();
로그인 후 복사

위 콘텐츠가 코드에 추가되면 다음과 같이 이벤트와 리스너를 추가할 수 있습니다.

test.emit('msg','the message send by node');
로그인 후 복사

첫 번째 매개변수는 리스너 매칭에 사용될 수 있도록 이벤트를 설명하는 문자열입니다

메시지를 수신하려면 리스너를 추가해야 하며 리스너는 이벤트에 트리거될 때 처리합니다. 예:

test.on('message',function(data){
    console.log(data);
});
로그인 후 복사

이벤트 모듈 addListener/on,한번,removeListener,removeAllListeners,emit 및 기타 기본 이벤트 수신 모드 메소드 구현. 버블링, 레이어별 캡처 등 DOM에 속하는 이벤트 동작이 없고, PreventDefault와 같은 이벤트 전달을 처리하는 메서드가 없기 때문에 프런트엔드 DOM 트리의 이벤트와 동일하지 않습니다. (), stopPropagation(), stopImmediatePropagation() 등

1. 클래스: events.EventEmitter: require('events').EventEmitter를 통해 EventEmitter 클래스를 얻습니다.
2.emitter.on(event, Listener): 특정 이벤트에 대한 리스너 배열 끝에 리스너를 추가합니다. 체인 호출을 용이하게 하기 위해 이미터를 반환합니다. 아래와 동일합니다.

3.emitter.removeListener(event, Listener)는 이벤트의 리스너 배열에서 리스너를 제거합니다.

4.emitter.listeners(event)는 지정된 이벤트의 리스너 배열을 반환합니다.
더 자세한 내용은 Node.js API 문서를 참조하세요.

다음 코드는 5초 안에 자동으로 소멸될 수 있는 기밀 메시지를 보여줍니다.

var EventEmitter = require('events').EventEmitter;
var secretMessage = new EventEmitter();
secretMessage.on('message', function (data) {
   console.log(data); 
});
secretMessage.on('self destruct', function () {
    console.log('the msg is destroyed!');
});
secretMessage.emit('message','this is a secret message.It will self deatruct in 5s');
setTimeout(function () {
   secretMessage.emit('self destruct');
},5000);
로그인 후 복사

在这段脚本中,发送了两个事件,有两个侦听器。当脚本运行时,消息事件就发生,并由“message”处理器处理

在Node.js中到处都用EventEmitter,所以掌握它是很重要的。Node.js通过I/O操作获得的数据并广泛使用Events模块来支持异步编程

常见问题解答:

问:对于一个事件是否有最大侦听器数量的限制?
答:默认情况下,如果事件有操作10个侦听器,它会发出警告。不过,可以使用emitter.setMaxListener(n)来更改这个数量

问:是否可以侦听所有发送出来的事件?
答:不能。我们需要给每个想要响应的事件创建侦听器

更多Node.js의 HTTP 모듈과 이벤트 모듈에 대한 자세한 설명相关文章请关注PHP中文网!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!