`
fsplove520
  • 浏览: 28000 次
  • 性别: 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初步简介

    Node.js的核心优势在于它的非阻塞I/O模型和事件驱动架构,这使得Node.js特别适用于构建高性能、可扩展的网络应用。 #### 二、Node.js的特性 1. **非阻塞I/O模型**:传统的服务器处理客户端请求时,通常会阻塞等待I...

    深入浅出node.js 田永强著

    2. **事件驱动模型**:Node.js的核心设计之一就是事件驱动模型。它通过监听和处理各种事件,如网络连接、数据读写等,实现高效并发处理。这种模型减少了不必要的线程切换,提高了系统性能。 3. **异步编程**:Node....

    Professional Node.js 高级编程 (英文pdf+源码)

    Node.js是由Ryan Dahl在2009年创建的,它基于Google的V8 JavaScript引擎,以其异步I/O模型和事件驱动架构而著名。Node.js使得JavaScript能够在服务器端运行,打破了JavaScript只能用于浏览器的传统限制,极大地扩展...

    node-v12.18.0.tar.gz

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

    Node.js Design Patterns Second Edition领域驱动.zip

    在Node.js这样的JavaScript平台上应用DDD,可以利用其非阻塞I/O和事件驱动的特性,构建高性能、可扩展的后端系统。 首先,我们需要理解领域驱动设计的基本概念。DDD将软件开发的核心聚焦于业务领域,通过识别业务...

    node.docx Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,可以用于开发服务

    Node.js以其独特的非阻塞I/O模型和事件驱动架构,在现代网络应用开发领域占据了一席之地。无论是构建简单的Web服务器还是复杂的实时通信系统,Node.js都能够提供强大的支持。随着技术的不断发展和完善,Node.js的...

    node.js入门教程

    它采用事件驱动、非阻塞I/O模型,这使得Node.js轻量且高效,非常适合数据密集型实时应用。在架构上,Node.js与EventMachine或Twisted等框架相似,但其核心区别在于采用了CommonJS模块系统,这为开发者提供了更加灵活...

    Node.js-NodeJS源码分析-由浅入深解析架构以及运行原理

    Node.js的核心设计理念在于使用非阻塞I/O和事件驱动模型,使其在处理高并发请求时表现出色。本篇文章将深入探讨Node.js的源码,解析其架构及运行原理。 一、事件循环(Event Loop) Node.js的运行机制离不开事件循环...

    Node.js-一个使用node.js构建无服务器平台的实验

    **Node.js介绍** Node.js是一个基于Chrome V8引擎的...以上就是关于“Node.js-一个使用node.js构建无服务器平台的实验”的详细解析,涵盖了从理论知识到实践操作的多个层面,帮助理解Node.js在无服务器架构中的应用。

    node-v12.13.0.tar.gz

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

    node-v9.11.2.tar.gz

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

    Node.js-Serverless无服务器架构应用开发指南

    Node.js的非阻塞I/O模型和事件驱动特性使其特别适合构建高并发、响应快速的服务。在Serverless框架下,如AWS的Lambda、Azure的Functions或Google Cloud Functions等,Node.js被广泛支持,开发者可以轻松部署和执行...

    node-v10.14.2-x86.msi

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

    我为什么向后端工程师推荐Node.js

    Node.js 的非阻塞I/O模型和事件驱动架构使其在以下几个方面展现出明显的优势: 1. **高性能**:由于采用了非阻塞I/O模型,Node.js能够高效地处理大量并发连接,这对于实时性要求高的应用尤为重要。 2. **统一的编程...

    Node.js-一种新的Web应用构建技术.docx

    Node.js的核心特点在于其事件驱动、非阻塞I/O模型,这使得它在处理高并发请求时表现出色,尤其适合数据密集型的实时应用。 1. 事件驱动模型 事件驱动模型是Node.js的基础。在传统的多线程模型中,每个连接都需要一...

    node-v14.13.0.tar.gz

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

    node-v10.17.0.tar.gz

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

    node-v17.7.1.tar.xz

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

    node-v12.1.0.tar.gz

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

Global site tag (gtag.js) - Google Analytics