nodejs基础(1)

定义

编写高性能网络服务器的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

猜你喜欢

转载自blog.csdn.net/qq_40893056/article/details/80688268