>웹 프론트엔드 >JS 튜토리얼 >node.js의 EventEmitter 클래스의 다양한 사용 코드에 대한 자세한 설명

node.js의 EventEmitter 클래스의 다양한 사용 코드에 대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-07-24 10:53:351517검색

EventEmitter 클래스

다양한 이벤트 처리를 구현하는 Node.js의 이벤트 모듈에는 EventEmitter 클래스가 정의되어 있습니다. 이벤트를 트리거할 수 있는 모든 개체는 EventEmitter 클래스의 하위 클래스를 통합하는 인스턴스 개체입니다. Node.js에서는 개체 이벤트 처리 기능의 바인딩 및 바인딩 해제와 관련된 모든 처리가 실행에 의존합니다. 이러한 메소드를 호출합니다.

event: 이벤트 이름을 나타냅니다.

listener: 이벤트 처리 기능을 나타냅니다.

괄호 안의 매개변수는 해당 매개변수가 선택적 매개변수임을 나타냅니다.

EventEmitter 클래스의 메소드에


var http = require("http");
var server = http.createServer();
server.on("request", function(req, res){ 
 console.log(req.url); 
 res.end();
});
server.listen(1337, "127.0.0.1");

here 코드 조각에서는 서버가 클라이언트 요청을 받으면 클라이언트가 요청한 대상의 URL 주소를 콘솔 창에 출력하고 응답 개체의 end 메서드를 사용하여 응답을 즉시 종료하도록 지정합니다.

코드를 실행한 후 브라우저 창에 http://localhost:1337://을 입력하면 콘솔 출력은 다음과 같습니다.


콘솔 출력

물론 다음을 통해서도 실행할 수 있습니다. multiple on 메소드 여러 이벤트 핸들러를 동일한 이벤트에 바인딩합니다. 다음과 같이:


var http = require("http");
var server = http.createServer();

server.on('request', function(req, res){ 
 console.log('接收到客户端请求')
})

server.on("request", function(req, res){ 
 console.log('处理客户端请求') 
 console.log(req.url); 
 res.end();
})

server.on('request', function(req, res){
 console.log('发送响应完毕')
})

server.listen(1337, "127.0.0.1");

OK, 코드를 실행하면 콘솔 출력은 다음과 같습니다.


Console 출력

또한 기본적으로 최대 10개의 시간 처리 함수를 지정된 것과 동일하게 바인딩할 수 있습니다. 이벤트 . setMaxListeners 메소드를 통해 바인딩할 수 있는 최대 이벤트 처리 함수 수를 수정할 수 있습니다. 메소드는 다음과 같습니다.


emitter.setMaxListeners(n)

EventEmitter 클래스의 Once 메소드

EventEmiiter 클래스의 Once 메소드는 다음과 같습니다. on 메소드와 유사하며, 지정된 이벤트에 대해 두 기능을 모두 수행합니다. 이벤트 처리 함수를 바인딩하는 것의 차이점은 이벤트 처리 함수가 한 번 실행된 직후에 접촉된다는 점입니다. 즉, 이벤트 처리 함수는 한 번만 실행됩니다. Once 메소드에서 사용되는 매개변수는 다음과 같이 on 메소드에서 사용되는 매개변수와 동일합니다.


emitter.once(event, listener)

실험을 해보세요.

또는 다음 코드를 실행합니다(위와 동일):


var http = require("http");
var server = http.createServer();

server.on('request', function(req, res){ 
 console.log('接收到客户端请求')
})

server.on("request", function(req, res){ 
 console.log('处理客户端请求') 
 console.log(req.url); 
 res.end();
})

server.on('request', function(req, res){
 console.log('发送响应完毕')
})

server.listen(1337, "127.0.0.1");

그런 다음 브라우저 창에서 127.0.0.1:1337을 두 번 연속으로 열면 콘솔 출력은 다음과 같습니다.


입니다. 2번 표시

그런 다음 on 이벤트를 1번 이벤트로 변경하면 코드는 다음과 같습니다.


var http = require("http");
var server = http.createServer();

server.once('request', function(req, res){ 
 console.log('接收到客户端请求')
})

server.on("request", function(req, res){ 
 console.log('处理客户端请求') 
 console.log(req.url); 
 res.end();
})

server.once('request', function(req, res){
 console.log('发送响应完毕')
})

server.listen(1337, "127.0.0.1");

콘솔 출력은 다음과 같습니다.


요청이 2번 처리되고 나머지는 인쇄만 됩니다. 한 번!

removeListener 메소드를 사용하여 이벤트 핸들러를 취소합니다.

코드는 다음과 같습니다.


var http = require("http");
var server = http.createServer();
var testFunction = function (req,res) {
 console.log('发送响应完毕')
}

server.on('request', function(req, res){
 console.log('接收到客户端请求')
})

server.on("request", function(req, res){
 console.log('处理客户端请求')
 console.log(req.url);
 res.end();
})

server.on('request', testFunction)
//删除
server.removeListener('request', testFunction)
server.listen(1337, "127.0.0.1");

코드를 실행하고 브라우저 창에 127.0.0.1:1337을 입력하면 콘솔 출력은 다음과 같습니다.


콘솔 출력

emit 방법: 이벤트를 맞춤 설정하고 실행합니다.

코드는 다음과 같습니다.


var http = require("http");
var server = http.createServer();

server.on("request", function(req, res){
 console.log(req.url);
});

//自定义事件
server.on("customEvent", function(arg1, arg2, arg3){
 console.log("自定义事件被触发");
 console.log(arg1);
 console.log(arg2);
 console.log(arg3);
});

//触发自定义事件
server.emit('customEvent', '自定义参数1', '自定义参数2', '自定义参数3')
server.listen(1337, "127.0.0.1");

이번에는 브라우저 창에 주소를 입력하는 대신 다음을 실행합니다. 콘솔 출력을 직접 보려면 콘솔 출력은 다음과 같습니다.


콘솔 출력

은 customEvent인 사용자 정의 이벤트를 수동으로 트리거했음을 보여줍니다.

위 내용은 node.js의 EventEmitter 클래스의 다양한 사용 코드에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.