Node笔记

回调函数

  • Node.js的回调函数使他大大提高了 Node.js 的性能,并且可以处理大量的并发请求。

    阻塞

    等前面的执行完了后面的才可以执行

    非阻塞

    异步执行

总结: 阻塞按是按顺序执行的,而非阻塞是不需要按顺序的,所以如果需要处理回调函数的参数,我们就需要写在回调函数内。

事件循环

  • 是单进程、单线程应用程序,因为可以通过事件回调支持开发所以性能高。每个API都异步,并且作为独立线程运行。使用Node.js相当于while(true)

事件驱动程序

  • 驱动模型:当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。
  • 当这个请求完成,它被放回处理对列,当到达对列开头,这个结果被返回给用户。
  • 事件驱动模型中会生成一个主循环来监听事件,当检测到事件时触发回调函数。

Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件,如下实例:

// 引入 events 模块
var events = require('events');
// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();

绑定事件处理程序:

eventEmitter.on('eventName', eventHandler);

通过程序触发事件:

eventEmitter.emit('eventName');

Node.js 事件

Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。

EventEmitter介绍

  • events 模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就 是事件发射与事件监听器功能的封装。
  • EventEmitter 支持 若干个事件监听器。

EventEmitter常用的API

  • EventEmitter.on(event, listener)、emitter.addListener(event, listener) 为指定事件注册一个监听器,接收一个字符串 event 和一个回调函数 listener。
  • EventEmitter.emit(event, [arg1], [arg2], [...]) 发射 event 事件,传递若干可选参数到事件监听器的参数表。
  • EventEmitter.once(event, listener) 为指定事件注册一个单次监听器,即监听器最多只会触发一次,触发后立刻解除该监听器。
  • EventEmitter.removeListener(event, listener) 移除指定事件的某个监听 器,listener 必须是该事件已经注册过的监听器。
  • EventEmitter.removeAllListeners([event]) 移除所有事件的所有监听器, 如果指定 event,则移除指定事件的所有监听器。

error 事件

EventEmitter 定义了一个特殊的事件 error,它包含了"错误"的语义,我们在遇到 异常的时候通常会发射 error 事件。

继承 EventEmitter

大多数时候我们不会直接使用 EventEmitter,而是在对象中继承它。包括 fs、net、 http 在内的,只要是支持事件响应的核心模块都是 EventEmitter 的子类。 原因:

  1. 首先,具有某个实体功能的对象实现事件符合语义, 事件的监听和发射应该是一个对象的方法。
  2. 其次JavaScript 的对象机制是基于原型的,支持 部分多重继承,继承 EventEmitter 不会打乱对象原有的继承关系。

Node.js Buffer(缓冲区)

创建buffer类

方法1: 创建长度为10字节的Buffer实例

let buf = new Buffer(10) //涉及安全问题
//使用Buffer.alloc()、Buffer.allocUnsafe() 或 Buffer.from()
let buf = Buffer.alloc()

方法2: 通过给定的数组创建Buffer实例

let buf = new Buffer([10,20,30,40,50])

方法3: 通过一个字符串来创建Buffer实例

let buf = new Buffer("www.giluo.live","utf-8")

utf-8 是默认的编码方式,此外它同样支持以下编码:"ascii", "utf8", "utf16le", "ucs2", "base64" 和 "hex"。

写入缓冲区

语法:

**buf.write(string[, offset[, length]][, encoding])**

参数: 参数描述如下:

  • string - 写入缓冲区的字符串。

  • offset - 缓冲区开始写入的索引值,默认为 0 。

  • length - 写入的字节数,默认为 buffer.length

  • encoding - 使用的编码。默认为 'utf8' 。

返回值: 返回实际写入的大小。如果 buffer 空间不足, 则只会写入部分字符串。

从缓冲区读取数据

语法:

buf.toString([encoding[,start[,end]]])

参数

  • encoding - 使用的编码。默认为 'utf8' 。

  • start - 指定开始读取的索引位置,默认为 0。

  • end - 结束位置,默认为缓冲区的末尾。

返回值:

解码缓冲区数据并使用指定的编码返回字符串。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

赞赏支持
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟
JSRUN前端笔记, 是针对前端工程师开放的一个笔记分享平台,是前端工程师记录重点、分享经验的一个笔记本。JSRUN前端采用的 MarkDown 语法 (极客专用语法), 这里属于IT工程师。