nodejs
nodejs是单线程单进程应用程序,但是V8引擎提供的异步执行回调接口可以处理大量的并发,nodejs性能非常高。nodejs积分每一个api都支持回调函数。
回调函数
要点:异步函数将回调函数作为最后一个参数,回调函数接受错误对象为第一个参数。异步编程依托回调来实现,nodejs异步编程直接体现酒是回调。
阻塞代码实列
添加一个app.js data.txt
var fs = require('fs');
var data = fs.readFileSync('data.txt');
console.log(data.toString());
console.log('程序执行完成');
执行
非阻塞代码
/**
*
* 回调作为异步最后一个
* 错误对象作为回调第一个参数
*
* */
fs.readFile('data.txt', function (err, data) {
if (err) return console.error(err);
console.log(data.toString());
})
console.log('程序执行完成');
运行:
事件
驱动原理:nodejs使用事件驱动模型,当webservice接收到请求,就关闭它然后惊喜处理,然后去服务下一个web请求,当这个请求完成,它被放回处理列队,当列队达到列开头,这个结果被返给用户。
绑定和监听事件
/**
*
* 1.引入events模块
* 2.创建事件监听和事件处理程序
* 3.触发事件
*
*/
var events = require('events');
var eventEmitter = new events.EventEmitter();
var myevtHandler = function () {
console.log('我是处理程序!');
}
eventEmitter.on('myevt', myevtHandler);
eventEmitter.emit('myevt');
运行
监听器传参
/**
*
* 1.引入events模块
* 2.创建事件监听和事件处理程序
* 3.触发事件
*
*/
var events = require('events');
var eventEmitter = new events.EventEmitter();
var myevtHandler = function () {
console.log('我是处理程序!');
}
eventEmitter.on('myevt', myevtHandler);
var listerHandler0 = function () {
console.log(0);
}
var listerHandler = function (a, b) {
console.log(a, b);
}
var listerHandler2 = function (a) {
console.log(a);
}
var listerHandler3 = function (a, b, c) {
console.log(a);
}
/**
*
* 一个事件多个监听器时
* 会先后调用监听器回调函数
*
*/
eventEmitter.on('lister', listerHandler0);
eventEmitter.on('lister', listerHandler);
eventEmitter.on('lister', listerHandler2);
eventEmitter.on('lister', listerHandler3);
eventEmitter.emit('myevt');
/**
* 按参数顺序执行监听器 有事件监听返回true 否则false
*/
console.log(eventEmitter.emit('lister', 1, 2));
console.log(eventEmitter.emit('lister2', 1, 2));
运行:
其他属性
1 | addListener(event, listener) 为指定事件添加一个监听器到监听器数组的尾部。 |
2 | on(event, listener) 为指定事件注册一个监听器,接受一个字符串 event 和一个回调函数。
|
3 | once(event, listener) 为指定事件注册一个单次监听器,即 监听器最多只会触发一次,触发后立刻解除该监听器。
|
4 | removeListener(event, listener)
移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器。 它接受两个参数,第一个是事件名称,第二个是回调函数名称。
|
5 | removeAllListeners([event]) 移除所有事件的所有监听器, 如果指定事件,则移除指定事件的所有监听器。 |
6 | setMaxListeners(n) 默认情况下, EventEmitters 如果你添加的监听器超过 10 个就会输出警告信息。 setMaxListeners 函数用于提高监听器的默认限制的数量。 |
7 | listeners(event) 返回指定事件的监听器数组。 |
8 | emit(event, [arg1], [arg2], [...]) 按参数的顺序执行每个监听器,如果事件有注册监听返回 true,否则返回 false。 |