说到nodejs的事件队列

本文探讨了事件队列在前端编程和Node.js后端开发中的应用,尤其关注如何利用事件机制解决雪崩问题,提高服务器性能。通过分析代码示例,了解事件队列如何按序执行任务,以及如何使用Node.js的事件机制有效管理并发访问,防止数据库压力过大。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  事件队列,将任务按序执行。

  应用场景:最经典的是WEB中的事件编程,如下

<html>
<body>
function event1(){
  // do event 1
}
function event2(){
  // do event 2
}
<button type="button" onclick='event1();event2()'>Click Me!</button>

</body>
</html>

在上面的代码中 为button控件的onclick事件绑定了两个任务 event1,event2, 当用户用鼠标点击按钮,就会触发onclick事件,从而按序执行队列中的任务 event1->event2

 在后端编程中,也有事件队列的应用,用来在服务器性能峰值时,有效缓解服务器压力

1. 我们用nodejs的事件机制,解决雪崩问题

     雪崩问题,就是指在缓存失效的情况下,瞬间产生的对数据库的大量并发访问,导致数据库性能下降,进而影响整个网站的性能.

      以下为一段CoffeeScript代码

events =  require('events')
eq = new events.EventEmitter //得到一个事件队列的实例
queryLock = false //加入一个锁

_test = (cb)->
  unless queryLock
    queryLock = true
    sql = 'select id from user'
    connect.runSqlAll sql,(err,result)->
      cb err,result
      queryLock = false
      eq.emit('query',err,{'xx':'i am emit by eventQ'})//触发query事件
  else
    eq.once('query',cb)//将要执行的任务绑定到eq的query事件队列中,注:once代表仅触发一次

注意,在node的api上有这么一段话:

By default EventEmitters will print a warning if more than 10 listeners are added for a particular event. This is a useful default which helps finding memory leaks. Obviously not all Emitters should be limited to 10. This function allows that to be increased. Set to zero for unlimited.

每个eventEmitter对象的一个监听事件,  如果绑定的任务超过了10个,就会报一个warnning。所以这里需要调用emitter.setMaxListeners(n) 方法 修改他的默认事件个数


参考内容:

朴灵 : http://www.infoq.com/cn/articles/tyq-nodejs-event

http://nodejs.org/docs/latest/api/events.html



                
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值