REPL
- Node.js REPL表示一个电脑的环境,类似于Windows系统终端或者Linux shell
- 自带的交互式解释器可用执行以下任务:
读取(读取用户输入)
执行(执行输入的命令)
打印(打印结果)
循环(循环操作,直到用户按两下ctrl-c退出)
简单的表达式计算
在命令行中可以执行加减乘除
使用变量
x = 10
多行表达式
node.js支持多行表达式,类似于js,会自动判断是否已经是一个完整的表达式
下划线_变量
使用下划线——获取上一个表达式的运算结果
Node.js回调函数
Node.js异步编程的直接体现就是回调。
异步编程依托于回调来实现,但是不能说使用回调后程序就异步化了
回调函数在完成任务之后就会被停用,Node使用了大量的回调函数,Node所有的api均支持回调函数
阻塞代码
阻塞代码指的是按照顺序进行运行的代码,只有当前一个代码运行结束之后,后一部分代码才开始执行
let fs = require("fs");
let data = fs.ReadFileSync("input.txt");
console.log(data.toString());
console.log("程序执行结束!");
你好世界!
程序执行结束!
非阻塞代码
非阻塞代码指的是不需要等待文件读取完,这样子可以读取文件的同时执行接下来的代码
let fs = require("fs");
fs.readFile("input.txt",function(error,data){
if(error != null){
return console.log(error);
}else{
console.log(data.toString());
}
});
console.log("程序执行结束!");
非阻塞进程是不按照顺序进行运行的,如果需要处理回调函数的参数,我们需要在回调函数内进行写代码
Node.js事件循环
- Node.js是单进程单线程的应用程序,但是因为V8引擎提供了异步执行的回调接口,因此可以处理大量并发,性能非常高。
- Node.js几乎每一个API都是支持回调函数的
- Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。
- Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数.
事件驱动程序
- Node.js使用事件驱动模型,当web server接收到请求,就将他关闭然后进行处理,再去服务下一个web请求。
- 当某个请求完成,会被放回处理队列,当到达队列开头,这个结果被返回给了用户。
- 该模型非常高效,可拓展性强,因为web server一直接受请求而不等待操作。
- 在事件驱动模型中,会生成一个主要的循环来监听事件,当检测到事件时触发回调函数。
- Node.js有多个内置事件,可以通过引入events模块,并且通过实例化EventEmitter类来绑定和监听事件。
//引入events模块
var events = require('events');
//创建eventEmitter对象
var eventEmitter = new events.EventEmitter();
//绑定事件处理程序
eventEmitter.on('eventName', eventHandler);
//触发事件
eventEmitter.emit('eventName');
下面是一个实现程序的实例
//引入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("程序执行完毕");
连接成功!
数据接收成功!
程序执行完毕