定义
编写高性能网络服务器的JavaScript工具包,即用js开发服务端程序。
特点
- 单线程
- 异步
- 事件驱动
- 运行快
- 耗内存
PHP与nodejs的区别
- PHP运行机制
PHP是不支持多线程的,但所用的服务器(Apache)是支持多线程的。Apache启动的时候,会初始化150个线程给PHP。如果有访问者访问服务器时,服务器将线程池的线程发配给访问者,访问者结束访问后,将线程释放到线程池,再重新访问。 php的缺陷
- 高并发和大数据
- 解决方法:所有的处理都是围绕着如何尽量地减少一个线程的时间
- nodejs运行机制
nodejs单线程,将多个访问进行排队,线程一个个访问,一个访问处理结束,才处理另外一个访问。为了解决访问效率差,采用异步操作。每处理一个访问,对其分配一块内存,紧接着处理下一个访问,对其分配一块内存。(轮询处理访问并为其分配一块内存。) nodejs的缺陷
耗内存大
异步消耗内存测试:网上一个百万级并发测试,未优化的情况下1M的连接消耗16G的内存
- 处理方法:扩大内存
异步和事件驱动
举例说明:
现有这样的程序流程:1,2,3,4,5(每个编号代表一个操作,3号操作代表数据库操作,返回数据集;4,5操作需要使用3号操作返回的数据集)
- 若是PHP:只有当前操作完成,才执行下一步操作。即完成3步骤,才执行4,5操作。(java,c++都是这样的运行方式)
- 若是nodejs这类的:步骤3还没结束,就执行4,5操作。如果还是顺序操作,这会报错,这是有异步导致的错误。所以引入事件驱动。将4,5操作封装到一个function的方法,3步骤结束后,调用这个方法,执行4,5操作,书写顺序:1,2,(4,5),3。
nodejs的劣势和解决方案
默认不支持多核。
- 解决方案:使用cluster解决
默认不支持服务器集群
- 解决方案:使用node-http-proxy解决
做负载均衡时,静态的由Nginx处理,动态的由node.js
- forever或者node-cluster实现灾难恢复
框架选择
- express:完善、稳定、文档全、社区大
- koa:超前、正在完善中
- Hapi:复杂,适合复杂的大型项目。
- express基础之上的sails