铁雪资源网 Design By www.gsvan.com

EventEmitter类

在Node.js的用于实现各种事件处理的event模块中,定义了一个EventEmitter类。所有可能触发事件的对象都是一个集成了EventEmitter类的子类的实例对象,在Node.js中,为EventEmitter类定义了许多方法,所有与对象的事件处理函数的绑定及解除相关的处理均依靠这些方法的调用来执行。

EventEmitter类的各种方法

event:代表事件名

listener:代表事件处理函数

中括号内的参数代表该参数为可选参数

方法名与参数 描述
addListener(event,listener)  对指定事件绑定事件处理函数 on(event, listener)  对指定事件绑定事件处理函数(addListener方法的别名) once(event, listener)  对指定事件指定只执行一次的事件处理函数 removeListener(event, listener)  对指定事件接触事件处理函数 setMaxListeners(n)  指定事件处理函数的最大数量,n为正数值,代表最大的可指定事件处理函数的数量 listeners(event)  获取指定事件的所有事件处理函数 emit(event, [arg1], [arg2], [...])  手工触发指定事件

EventEmitter类的on方法

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

在这段代码中,我们指定当服务器接收到客户端请求时,在你控制台窗口中输出客户端请求的目标的URL地址,并使用响应对象的end方法立即结束响应。

执行代码,然后在浏览器窗口中输入:http://localhost:1337://,控制台输出如下:

node.js中的事件处理机制详解
控制台输出

当然,也可以通过多个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,执行代码,控制台输出如下:

node.js中的事件处理机制详解
控制台输出

另外,在默认情况下,针对同一个指定事件,最多可以绑定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,控制台输出如下:

node.js中的事件处理机制详解
显示了两次

然后将on事件修改为once事件,代码如下:

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

控制台输出如下:

node.js中的事件处理机制详解
请求处理2次,其余只打印1次!

使用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,控制台输出如下

node.js中的事件处理机制详解
控制台输出

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

这次不在浏览器窗口中输入地址,直接运行代码查看控制台输出,控制台输出如下:

node.js中的事件处理机制详解
控制台输出

说明我们手动触发了自定义事件,也就是customEvent。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用node.js能有所帮助,如果有疑问大家可以留言交流。

标签:
nodejs事件机制,node.js,机制,nodejs运行机制

铁雪资源网 Design By www.gsvan.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
铁雪资源网 Design By www.gsvan.com

评论“node.js中的事件处理机制详解”

暂无node.js中的事件处理机制详解的评论...

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。