`
fsplove520
  • 浏览: 26352 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

node.js架构之 事件模型

 
阅读更多
众所周知,node.js架构采用的是异步,事件模式机制,来提高服务器性能,那么你了解node.js的事件模式是怎么去设计的吗? 接下来将带你初步了解node.js事件机制和在你的程序中编写事件:

首先应该先了解EventEmitter模型。它可以发送一个事件以及让消费者订阅感兴趣的事件。我们可以把它看成是向一个异步函数进行回调传递模式的扩展。特别是,当需要进行多次回调时,EventEmitter会更显优势。
例如,有一个调用者向远程服务器发送了一个“列出文件”的请求。你可能想对返回结果进行分组,对每一个分组进行一次回调处理。EventEmitter模型可以让你在每一个分组上发送“文件”回调,当全部操作完成时进行“结束”处理。
使用EventEmitter时,只需设置好相关事件和参数。
var EventEmitter = require('events').EventEmitter;    
var util = require('util');    
function MyClass() {    
  if (!(this instanceof MyClass)) return new MyClass();    
  EventEmitter.call(this);     
  var self = this;    
  setTimeout(function timeoutCb() {    
    self.emit('myEvent', 'hello world', 42);    
  }, 1000);    
}    
util.inherits(MyClass, EventEmitter);   

MyClass构造函数创建了一个时间触发器,触发延时为1s,触发事件为myEvent。要使用相关事件,需要执行on()方法:
var myObj = new MyClass();    
var start = Date.now();    
myObj.on('myEvent', function myEventCb(str, num) {    
  console.log('myEvent triggered', str, num, Date.now() - start);    
}); 
  
这里要注意的是,订阅的EventEmitter事件虽然是异步事件,但当时间触发时,监听方的动作是会同步的。因此如果上述myEvent事件有10个监听者,所有的监听会被按次序调用而不用等候事件的循环。
如果EventEmitter的一个子类生成了一个emit(‘error’)事件,但是无任何的监听方对此进行订阅,那么EventEmitter基类会抛出一个异常,从而导致当执行process对象时触发uncaughtException事件。

好了,通过上面的对事件机制的理解及代码实例,你已经学会了如何在node.js中去写一个我们自己的事件,已经如果去捕获相关事件去处理逻辑
分享到:
评论

相关推荐

    Node.js 开发指南.pdf

    1.4.1 Node.js架构简介 5 1.4.2 Node.js与PHP+Nginx 6 1.5 JavaScript简史 6 1.5.1 Netscape与LiveScript 7 1.5.2 Java与Javascript 7 1.5.3 微软的加入——JScript 8 1.5.4 标准化——ECMAScript 8 ...

    node-v14.5.0.tar.gz

    Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node ...

    node-v12.1.0.tar.gz

    Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node ...

    后端开发 技术关键词: Node.js与Express框架 内容关键词: 事件驱动的非阻塞I/O

    计算机二级c语言真题后端开发 技术关键词: Node.js与Express框架 内容关键词: 事件驱动的非阻塞I/O ...Node.js的非阻塞I/O和事件驱动模型,使其非常适合处理高并发的实时应用,如在线聊天、实时数据流等。

    node-v14.19.1-x86.msi

    Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node ...

    node-v14.21.3.tar.xz

    Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node ...

    node-v14.18.0.tar.xz

    Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node ...

    《Node即学即用》 Node, Up and Running 原版

    学习Node的事件循环架构、非阻塞I/O和事件驱动编程模型; 动手编写I/O示例应用,其中包括一个聊天服务器; 用现成的设计模式编写事件驱动程序; 在多核环境下高效地运用Node的单线程策略; 配合具体例子,深入框架...

    node-v16.19.0.tar.xz

    Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node ...

    node-v16.19.1.tar.xz

    Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node ...

    node-v16.19.1.tar.gz

    Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node ...

    node-v16.19.0.tar.gz

    Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node ...

    node-v8.16.2.tar.xz

    Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node ...

    node-v0.11.16.tar.gz

    Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node ...

    node-v0.11.15.tar.gz

    Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node ...

    node-v0.12.11.tar.gz

    Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node ...

    node-v0.12.12.tar.gz

    Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node ...

    node-v0.12.9.tar.gz

    Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node ...

    node-v0.12.8.tar.gz

    Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node ...

    node-v0.12.16.tar.gz

    Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node ...

Global site tag (gtag.js) - Google Analytics