Maison  >  Article  >  interface Web  >  Explication détaillée des divers codes d'utilisation de la classe EventEmitter dans node.js

Explication détaillée des divers codes d'utilisation de la classe EventEmitter dans node.js

伊谢尔伦
伊谢尔伦original
2017-07-24 10:53:351512parcourir

Classe EventEmitter

Dans le module d'événements de Node.js, qui est utilisé pour implémenter divers traitements d'événements, une classe EventEmitter est définie. Tous les objets susceptibles de déclencher des événements sont des objets d'instance qui intègrent une sous-classe de la classe EventEmitter. Dans Node.js, de nombreuses méthodes sont définies pour la classe EventEmitter. Tous les traitements liés à la liaison et à la dissociation de la fonction de traitement des événements de l'objet reposent sur l'exécution. appels à ces méthodes.

event : représente le nom de l'événement

listener : représente la fonction de traitement de l'événement

Les paramètres entre parenthèses représentent que le paramètre est un paramètre facultatif

on méthode de la classe 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");

Dans ce code, on précise que lorsque le serveur reçoit Lorsque le client fait une demande, affichez l'adresse URL de la cible demandée par le client dans la fenêtre de votre console et utilisez la méthode end de l'objet de réponse pour mettre immédiatement fin à la réponse.

Exécutez le code, puis saisissez : http://localhost:1337:// dans la fenêtre du navigateur, la sortie de la console est la suivante :


Sortie de la console

Bien sûr, vous pouvez également lier plusieurs gestionnaires d'événements au même événement via l'exécution de plusieurs méthodes on. Comme suit :


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, exécutez le code, la sortie de la console est la suivante :


Sortie de la console

De plus, par défaut, jusqu'à 10 fonctions de traitement du temps peuvent être liées au même événement spécifié. Le nombre maximum de fonctions de gestion d'événements pouvant être liées peut être modifié via la méthode setMaxListeners comme suit :


emitter.setMaxListeners(n)

méthode once de la classe EventEmitter

La méthode once de la classe EventEmiiter est similaire à la méthode on. Leur fonction est de lier la fonction de traitement d'événement à l'événement spécifié. La différence est que lorsque la fonction de traitement d'événement est exécutée une fois. , il sera contacté immédiatement, c'est-à-dire que la fonction de traitement des événements ne sera exécutée qu'une seule fois. Les paramètres utilisés par la méthode once sont les mêmes que ceux utilisés par la méthode on, comme suit :


emitter.once(event, listener)

Faites une expérience.

Ou exécutez le code suivant (identique à ci-dessus) :


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");

Ensuite, ouvrez 127.0.0.1:1337 deux fois de suite dans le navigateur fenêtre, contrôle La sortie de la station est la suivante :


est affichée deux fois

puis l'événement activé est modifié en un événement unique, le code est le suivant suit :


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");

La sortie de la console est la suivante :


La requête est traitée 2 fois, et le reste est imprimé une seule fois !

Utilisez la méthode removeListener pour annuler la fonction de gestionnaire d'événements

Le code est le suivant :


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");

Exécutez le code, entrez 127.0.0.1:1337 dans la fenêtre du navigateur, la sortie de la console est la suivante


Sortie de la console

méthode d'émission : Personnalisez l'événement et déclenchez-le

Le code est le suivant :


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");

N'entrez pas l'adresse dans la fenêtre du navigateur cette fois, exécutez le code directement pour afficher la sortie de la console. La sortie de la console est la suivante :


Sortie de la console

<.> indique que nous avons déclenché manuellement l'événement personnalisé, qui est customEvent.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn