nodejs学习笔记
2017-04-02 10:54
274 查看
Node.js 异步编程的直接体现就是回调。
异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。
回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数。
例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回。
这样在执行代码时就没有阻塞或等待文件 I/O 操作。这就大大提高了 Node.js 的性能,可以处理大量的并发请求。
Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。
Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件,
一个fs.readStream对象会在文件被打开的时候发出一个事件。
所有这些产生事件的对象都是 events.EventEmitter 的实例。
string - 写入缓冲区的字符串。
offset - 缓冲区开始写入的索引值,默认为 0 。
length - 写入的字节数,默认为 buffer.length
encoding - 使用的编码。默认为 ‘utf8’ 。
读取buffer:
buf.toString([encoding[, start[, end]]])
参数
encoding - 使用的编码。默认为 ‘utf8’ 。
start - 指定开始读取的索引位置,默认为 0。
end - 结束位置,默认为缓冲区的末尾。
返回值
解码缓冲区数据并使用指定的编码返回字符串。
实例
异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。
回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数。
例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回。
这样在执行代码时就没有阻塞或等待文件 I/O 操作。这就大大提高了 Node.js 的性能,可以处理大量的并发请求。
阻塞代码实例:
var fs = require("fs"); var data = fs.readFileSync('input.txt'); console.log(data.toString()); console.log("程序执行结束!");
非阻塞代码实例:
var fs = require("fs"); fs.readFile('input.txt', function (err, data) { if (err) return console.error(err); console.log(data.toString()); }); console.log("程序执行结束!");
事件驱动:
// 引入 events 模块 var events = require('events'); // 创建 eventEmitter 对象 var eventEmitter = new events.EventEmitter(); // 创建事件处理程序 var connectHandler = function connected() { console.log('连接成功。'); // 触发 data_received 事件 eventEmitter.emit('data_received'); } // 绑定 connection 事件处理程序 eventEmitter.on('connection', connectHandler); // 使用匿名函数绑定 data_received 事件 eventEmitter.on('data_received', function(){ console.log('数据接收成功。'); }); // 触发 connection 事件 eventEmitter.emit('connection'); console.log("程序执行完毕。");
在 Node 应用程序中,执行异步操作的函数将回调函数作为最后一个参数, 回调函数接收错误对象作为第一个参数。 Node.js EventEmitter
Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。
Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件,
一个fs.readStream对象会在文件被打开的时候发出一个事件。
所有这些产生事件的对象都是 events.EventEmitter 的实例。
Node.js Buffer(缓冲区)
var buf = new Buffer(10); var buf = new Buffer([10, 20, 30, 40, 50]); var buf = new Buffer("www.baidu.com", "utf-8"); 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 - 结束位置,默认为缓冲区的末尾。
返回值
解码缓冲区数据并使用指定的编码返回字符串。
实例
buf = new Buffer(26); for (var i = 0 ; i < 26 ; i++) { buf[i] = i + 97; } console.log( buf.toString('ascii')); // 输出: abcdefghijklmnopqrstuvwxyz console.log( buf.toString('ascii',0,5)); // 输出: abcde console.log( buf.toString('utf8',0,5)); // 输出: abcde console.log( buf.toString(undefined,0,5)); // 使用 'utf8' 编码, 并输出: abcde
相关文章推荐
- NodeJs新手学习笔记练习项目大纲
- nodejs 学习笔记---非阻塞请求响应
- nodeJs学习笔记-Node的模块实现
- 【NodeJS 学习笔记02】入门资源很重要
- 【NodeJS 学习笔记02】入门资源很重要
- 【NodeJS 学习笔记01】不学就老了
- 我是如何学习NodeJs的 – 笔记1
- NodeJS的一些个人学习笔记
- Node学习笔记——NodeJS的异步IO
- 学习笔记之NodeJs基本操作
- NodeJs新手学习笔记练习项目大纲 推荐
- nodejs 学习笔记--debug
- nodejs学习笔记 -- socket.io笔记
- NodeJS-学习笔记(2)--使用node提供的express框架开发简单的web应用
- Nodejs 学习笔记-相片整理Demo(二)
- NodeJs新手学习笔记之工具准备
- NodeJS学习笔记
- nodejs 学习笔记---非阻塞请求响应
- 【NodeJS 学习笔记04】新闻发布系统
- NodeJS学习笔记 - Apache反向代理集成实现