nodejs之旅-005-基础知识-事件处理机制及事件环机制

事件处理机制及事件环机制

现在介绍 nodejs的事件相关内容。
接触过编程的同学应该在了解,在访问任何网页的时候,会伴随着许多的事件,例如点击菜单,移动鼠标等等。那么nodejs是如何处理的?
这里需要介绍EventEmitter类

EventEmitter类

在Nodejs中用于实现各种事件处理的event模块中,定义了一个EventEmitter类。所有可能触发事件的对象都是一个继承了EventEmitter类的子类的实例对象。
介绍下EventEmitter类的方法
EventEmitter类的方法
方法名与参数描述
addListener(event, listener)对指定时间绑定事件处理函数
on(event, listener)addListener别名
once(event, listener)对指定时间绑定只处理一次的事件处理函数
removeListener(event, listener)对指定事件解除处理函数
removeAllListener([event])对指定的事件解除所有事件处理函数
setMaxListeners(N)指定事件处理函数的最大数量
listeners(event)获取制定事件的所有事件处理函数
emit(event,[arg1],[...])手工触发指定事件

EventEmitter类的各个方法

/**
 * Created by wanq on 14/11/15.
 */
var http = require('http');
var server = http.createServer();

server.on('request', function (req, res) {
    if (req.url !== '/favicon.ico') {
        console.log(req.url);
    }
    res.end();
})
server.listen(1337, '127.0.0.1');

获取指定事件的事件处理函数的数量

EventEmitter类自身有个listenerCount方法,可以用来吼去某个对象的指定事件的事件处理函数的数量。
/**
 * Created by wanq on 14/11/15.
 */
var http = require('http');
var events = require('events');

var server = http.createServer();
server.on('request', function (req, res) {
    if (req.url !== '/favico.ico') {
        console.log(req.url);
    }
    res.end();
});
server.listen(1337, '127.0.0.1');
console.log(events.EventEmitter.listenerCount(server, 'request'));

EventEmitter类自身所拥有的事件

在events模块中,EventEmitter类本身定义了两个事件:newListener事件与removerListener事件。
/**
 * Created by wanq on 14/11/15.
 */
var http = require('http');
var server = http.createServer();
server.on('request', function (req, res) {
    if (req.url !== '/favico.ico') {
        console.log(req.url);
    }
    res.end;
});

server.on('removeListener', function (e, f) {
    console.log("对"+e + "事件取消事件处理函数"
    )
    ;
    console.log(f);
});

server.on('newListener', function (e, f) {
    console.log("对"+e + "事件添加事件处理函数"
    )
    ;
    console.log(f);
});

var testFunction = function (req, res) {
    console.log(req.url);
};

server.on('request', testFunction);
server.removeListener('request', testFunction);
server.listen(1337, '127.0.0.1');

事件环机制

事件环机制的意思是,你在实现的时候,触发的事件会形成一个个环。具体点就是,就像你在厨房做饭,你要干的活为洗菜,煮饭,炒菜。
正常的顺序为:洗菜,煮饭,炒菜。
但是你可以先淘米,之后就放在电饭煲里煮饭,到饭熟的这段时间,你可以洗菜,之后就炒菜了。不用等饭熟了在炒菜。
同样的nodejs中也是同样的,当你触发了一个事件的时候,不用什么都不用做,可以处理其他的业务,等那个事件处理完成,会调用回调函数的,处理完回调函数,就形成了一个事件环了。
所以nodejs中会形成许多的事件环。
这也依赖于nio机制,不用等待处理完才能继续执行回调函数。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值