关于node.js
首先,node.js不是一门语言,是一个平台。因为在以前,javascript主要是用于网页的交互,所以必须依附于浏览器存在,只有在浏览器上才能运行javascript. 后来javascript的使用者越来越多,ECMAscript的标准也逐渐完善,功能越来越多,有人就想用javascript来写后端一统天下做一个全盏工程师,于是就出现node.js了。Node.js是集成了Google v8引擎来执行代码,而且大部分的模块都是用javascript来写的。这使得javascript可以离开了浏览器的环境单独工作,所以javascript的使用场景就更加多了。
基于事件驱动
Node.js是基于事件驱动的,所以可以处理高并发请求。而且node.js是非阻塞的。关于这个非阻塞其实我也一直不太明白,不过我现在好像有一点了解了。因为node.js是基于javascript写的,javascript有一个很重要的特性就是异步编程。
(下面Javascript都用js代替)
因为js本身是单线程了,也就是一个js文件,执行起来是按照语句顺序执行的。既然如此那怎么能异步呢?这个问题原来也困扰了我很久。其实异步不是指js本身的异步。因为js是在浏览器中运行的,浏览器是有多个线程的,在执行到js的异步请求语句的时候,后面的语句需要等这个请求完成之后才能执行,这样就会阻塞后面的语句了,这个时候浏览器就假死了。所以异步请求是请求浏览器另开一个b线程,b线程是不同于当前执行js 的线程的,然后通过回调函数来返回请求结果,这个时候呢,异步请求就交给b线程来做了,这个js文件剩下语句的就可以继续执行了。直到b线程做好了,然后通过回调函数返回结果给js来处理,这个时候等js把手上忙的事情都忙完了,就可以把返回结果一个个来进行处理了。(好像说的有点乱,下次再修改)
Node.js是非阻塞的,主要就是利用异步请求来实现(个人理解,不妥请指出)。
EventEmitter
因为node.js是基于事件驱动的,所以events模块非常重要。类EventEmitter是events模块的定义与实现。
今天主要是学习了EventEmitter的一些方法,不过node.js的api好多东西都看不懂,应该都是es6的新特性,比如定义用了const,还有函数不写function(a,b){//..}了而是写成(a,b)=>{//…}这样的模式,有点不太习惯。
今天先写到这里吧。