Node问题梳理总结
-
-
- 1、koa和express有哪些不同?
- 2、两个Node.js进程如何通信?
- 3、浏览器与Node中的事件循环有什么区别?
- 4、如何实现JWT鉴权机制?说说思路
- 5、Node性能如何进行监控以及优化?
- 6、说说对中间件概念的理解,如何封装node中间件?
- 7、Node文件查找的优先级以及require方法的文件查找策略
- 8、Node中stream的理解?应用场景
- 9、Node中的Buffer的理解?场景
- 10、Node中process的理解,常用方法?
- 11、Node有哪些全局对象
- 12、对node的理解,优缺点,应用场景
- 13、common.js和es6模块中引入的区别
- 14、node单线程还是多线程
- 15、node单线程为什么还能支持高并发
- 16、node如何创建子进程
-
1、koa和express有哪些不同?
express框架是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,主要基于 Connect 中间件,并且自身封装了路由、视图处理等功能。
koa是 Express 原班人马基于ES6 新特性重新开发的框架,主要基于 co 中间件,框架自身不包含任何中间件,很多功能需要借助第三方中间件解决,但是由于其基于 ES6 generator 特性的异步流程控制,解决了 “callback hell” 和麻烦的错误处理问题。
相同点:两个框架都对http进行了封装。相关的api都差不多,同一批人所写。
不同点:
-
express内置了许多中间件可供使用,而koa没有。
-
express包含路由,视图渲染等特性,而koa只有http模块。
-
express的中间件模型为线型,而koa的中间件模型为U型,也可称为洋葱模型构造中间件。
-
express通过回调实现异步函数,在多个回调、多个中间件中写起来容易逻辑混乱。
总结
Express
优点:线性逻辑,通过中间件形式把业务逻辑细分、简化,一个请求进来经过一系列中间件处理后再响应给用户,清晰明了。
缺点:基于 callback 组合业务逻辑,业务逻辑复杂时嵌套过多,异常捕获困难。
Koa
优点:首先,借助 co 和 generator,很好地解决了异步流程控制和异常捕获问题。其次,Koa 把 Express 中内置的 router、view 等功能都移除了,使得框架本身更轻量。
缺点:社区相对较小
2、两个Node.js进程如何通信?
这里要分两种场景:
- 不同电脑上的两个 Node.js 进程间通信
- 同一台电脑上两个 Node.js 进程间通信
对于第一种场景,通常使用 TCP 或 HTTP 进行通信,而对于第二种场景,又分为两种子场景:
- Node.js 进程和自己创建的 Node.js 子进程通信
- Node.js 进程和另外不相关的 Node.js 进程通信
前者可以使用内置的 IPC 通信通道,后者可以使用自定义管道,接下来进行详细介绍:
- 不同电脑上的两个Node.js进程通信:
首先得搞清楚如何标识网络中的进程? 网络层的 ip 地址可以唯一标识网络中的主机,而传输层的协议和端口可以唯一标识主机中的应用程序(进程),这样利用三元组(ip 地址,协议,端口)就可以标识网络的进程了
- 同一台电脑上两个 Node.js 进程间通信
虽然网络 socket 也可用于同一台主机的进程间通讯(通过 loopback 地址 127.0.0.1),但是这种方式需要经过网络协议栈、需要打包拆包、计算校验和、维护序号和应答等,就是为网络通讯设计的,而同一台电脑上的两个进程可以有更高效的通信方式,即 IPC(Inter-Process Communication),在 unix 上具体的实现方式为 unix domain socket,这是服务器端和客户端之间通过本地打开的套接字文件进行通信的一种方法,与 TCP 通信不同,通信时指定本地文件,因此不进行域解析和外部通信,所以比 TCP 快,在同一台主机的传输速度是 TCP 的两倍。
使用自定义管道
如果是两个独立的 Node.js 进程,如何建立通信通道呢?在 Windows 上可以使用命名管道(Named PIPE),在 unix 上可以使用 unix domain socket,