简单认识下Nodejs
-
最近又跑去看看nodejs,加深了点印象,用我浅浅的知识储备给大家总结一下:
-
1、什么是Node.js
-
Node.js它既是开发平台,也是运行环境,也是个新语言...它本身是基于google的javascript v8引擎开发的,因此在编写基于它的代码的时候使用JavaScript语言。但是又不同于传统观念的JavaScript,它的服务端功能以及部分客户端功能必须在服务端进行,所以它实际上是一种在服务端的开发+运行的js(后面我就叫js了,省事)语言,它本身可以作为http server也可以当作TCP Server 用。
-
2、特点
-
它是一个js运行环境,依赖于google的v8引擎进行代码解析,同时它又具有单线程、事件驱动、非阻塞I/O、轻量、可伸缩...等特征
-
同样短板也很明显,无法直接渲染静态页面,提供静态服务、没有根目录概念、必须通过路由有程序指定文件才能渲染文件。它的特点也决定了它只适合做一些大量I/O的东西,比如,聊天室、表单提交等不需要大量计算的功能。做一些微信后端开发,或者做消息系统等,可以整个项目用,也可以根据它的特点在某个模块使用,比如搜查可调,打造一个消息系统。
-
相信说完优势小伙伴们对于劣势已经心知肚明了,它不适合做一些CPU较密集的应用。CPU密集型应用给node带来的挑战主要是:1.由于js单线程的原因,如果有长时间的运算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O(I/O=输入/输出)无法发起。2.只支持单核cpu,不能充分利用cpu。3.可靠性低,一旦代码某个环节崩溃,整个系统都崩溃,牵一发而动全身。4.开源组件库质量参差不齐,更新快,向下不兼容。5.Debug(ps:排除bug)不方便。
-
上述五种缺点,我只会解决1和3的问题,其他的各位如果有好的办法不要忘了小弟。抱拳/
-
1、分解大型运算任务为多个小任务,使得运算能够及时释放,不阻塞I/O
-
3.1、Nnigx反向代理,负载均衡,开多个进程,绑定多个端口
-
3.2、开多个进程监听一个端口,使用cluster模块