实在抱歉!今天(2018年12月13日10:01:41)才看到有什么多阅读量,我写这个是本身为公司一个分享会,node从浅到深列弄的一些相关知识点,而后有童鞋现场提问的我就大概整理一下发出来而已,没想到会有1千多的阅读量,尴尬,抽个时间我整理一下,来个通俗易懂,条理分明的,抱歉抱歉~javascript
Node的首要目标是提供一种简单的,用于建立高性能服务器的开发工具 Web服务器的瓶颈在于并发的用户量,对比Java和Php的实现方式html
其实node 火爆最大的缘由是前端的火爆,前端后重视后,在的大前端的大潮中推向顶峰,由于Web主要场景就是接收客户端的请求读取静态资源和渲染界面,因此Node很是适合Web应用的开发前端
Node.js是一个基于 Chrome V8 引擎的JavaScript运行环境(runtime),Node 不是一门语言 是让js运行在后端的运行时,而且不包括javascript全集,由于在服务端中不包含DOM和BOM,Node也提供了一些新的模块例如http,fs模块等。Node.js 使用了事件驱动、非阻塞式 I/O 的模型,使其轻量又高效而且Node.js 的包管理器 npm,是全球最大的开源库生态系统。java
我我的对node的事件轮询的理解是这样的,主线程分配任务下去,注册回调函数。主线程里在执行代码的时候io继续等待,主线程执行完毕后进行轮询,由于这个时候主线程是空闲状态,因此能够一直轮询,直到发现有某一个io操做给他发了信号告诉他我如今弄好了,你能够用这个数据,主线程的资源就拿来执行回调函数。也就是说从始至终都只有主线程在作事情,主线程要否则是在执行函数,要否则就是在进行事件的轮询,去寻找有哪一个事件完成了须要执行他的回调函数。node
大概就是所谓的单线程异步吧es6
固然不少童鞋可能会问,为何js是单线程, javascript在最初设计时设计成了单线程,若是多个线程同时操做DOM那岂不会很混乱?这里所谓的单线程指的是主线程是单线程的,因此在Node中主线程依旧是单线程的。数据库
来一张图关于浏览器的npm
本人查了一些资料,其实渲染引擎内部是多线程的,内部包含两个最为重要的线程ui线程和js线程。这里要特别注意ui线程和js线程是互斥的,由于JS运行结果会影响到ui线程的结果。ui更新会被保存在队列中等到js线程空闲时当即被执行。后端
其余线程就是涉及事件循环(Event Loop),你们能够自行谷歌。api
其实就是至关于咱们js数组理解就能够了,那为何node须要用buffer表示。 缓冲区Buffer是暂时存放输入输出数据的一段内存。 JS语言没有二进制数据类型,而在处理TCP和文件流的时候,必需要处理二进制数据。 貌似es6也出了一个TypedArray,应该是差很少的。
以前写的,如今基本忘记了~~ 流相关-机票
let http = require('http');
//req 流对象 是可读流
//res 是一个可写流 write
let server = http.createServer();
let url = require('url');
//当客户端链接上服务器以后执行回调
server.on('connection', function () {
console.log('客户端链接 ');
});
//req表明客户端的链接,server服务器把客户端的请求信息进行解析,而后放在req上面
//res表明响应,若是但愿向客户端回应消息,须要经过 res
server.on('request', function (req, res) {
console.log(req.method);//获取请求方法名
let { pathname, query } = url.parse(req.url, true);
console.log(pathname);
console.log(query);
console.log(req.url);//获取请求路径
console.log(req.headers);//请求头对象
let result = [];
req.on('data', function (data) {
result.push(data);
});
req.on('end', function () {
let r = Buffer.concat(result);//请求体
console.log(r.toString());
//若是进行响应
res.end(r);
})
});
server.on('close', function (req, res) {
console.log('服务器关闭 ');
});
server.on('error', function (err) {
console.log('服务器错误 ');
});
server.listen(8089, function () {
console.log('server started at http://localhost:8089');
});
复制代码
没写完,后续整理~