• 【第一节 Node.js简介】


    1.Node.js是什么?
      
      Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快速的、可扩展的网络应用。Node.js采用事件驱动和非阻塞I/O模型,使其变得轻微和高效,非常适合构建运行在分布式设备的数据密集型实时应用。
      
      它运行于浏览器的Javascript,浏览器就是Javascript代码的解析器,而Node.js则是服务器端JS的代码解析器,存于服务器端的JS代码由Node.js来解析和应用。

      

      JS解析器只是JS代码运行的一种环境,浏览器是JS运行的一种环境,浏览器为JS提供了操作DOM对象和window对象等接口。Node.js也是JS的一种运行环境,node.js为JS提供操作文件、创建http服务、创建TCP、UDP服务等接口,所以Node.js可以完成其他后台语言能完成的工作。

      总结:Node.js是一个让JavaScript运行在服务端的开发平台。
     
    2.Node.js能做什么?  
    • 以前JavaScript并不涉及什么逻辑代码,但是node的出现使得JavaScript能做一些负责的逻辑代码
    • JavaScript为客户端而生,node为网络而生
    • 异步方式,适合开发大的应用
           具有复杂逻辑的网站
           基于社交网络的大Web的应用
           Web Socket服务器
           TCP/UDP套接字应用程序
           命令行工具
           交互式终端程序
           ...

    3.Node.js为什么会出现?

      以前是没有人会想到用JavaScript作为自己的web server 这是因为什么呢?因为JavaScript是比较慢和乱 


      - V8引擎解决了JavaScript慢的问题 
      - commonjs解决了乱的问题 
      - Node的特性是事件驱动 
      - 为了弥补JavaScript在服务器端的空白

      所以,Node.js的产生因素:

            V8(一个字就是快)
            javaScript在服务器端空白
            事件驱动
            CommonJs的规范化

    4.交互式运行环境:PEPL

          Node.js提供了一个交互式运行环境,通过这个环境,可以立即执行JS代码,使用方法类似于Chrome浏览器中Firebug插件中的Console。

          在Linux环境进入终端后,输入"node"进入Node.js的交互式运行环境,Ctrl+d可以退出此环境。

          查看系统中安装的Node.js版本:node -v

          运行JS文件,eg:node file.js

    5.Node.js模块和包

          ⑴模块:

             Node.js官方提供了很多模块,这些模块分别实现了一种功能,如操作文件模块fs,构建http服务模块的http等,每个模块都是一个JS文件,当然也可以自己编写模块。

          ⑵包:

              包可以将多个具有依赖关系的模块组织在一起,封装多个模块,以方便管理。Node.js采用了CommonJS规范,根据CommonJS规范规定,一个JS文件就是 一个模块,而包是一个文件夹,包内必须包含一个JSON文件,命名package.json。一般情况下,包内bin文件夹存放二进制文件,包内的lib文件夹存放JS文件,包内的doc文件夹存放文档,包内的test文件夹存放单元测试。package.json文件中需要有包含的字段及包的使用。

          ⑶npm包管理工具:

             npm是node.js的包管理工具,npm定义了包依赖关系标准,我们使用npm主要用来下载第三方包和管理本地下载的第三方包。

    6.异步式I/O与事件驱动

        Node.js最大的特性就是采用异步式I/O与事件驱动的架构设计。对于高并发的解决方案,传统的架构是多线程模型,也就是为每个业务逻辑提供一个系统线程,通过系统线程切换来弥补同步式I/O调用时的时间开销。Node.js使用的单线程模型,在执行的过程中会维护一个事件队列,程序在执行时在进入时间循环等待下一个事件到来。
    普通:res=db.query("select * from user")
                res.output();
            
    Node.js: res=db.query("select * from user",function(res){
              res.output();
         })
        

      传统的实现方法的代码执行到第一行的时候,线程就会阻塞,等待数据库返回结果,然后再继续处理。由于数据库的操作可能涉及磁盘读写和网络通信,其延时可能向当长。对于高并发的访问,一方面线程长时间 阻塞等待返回结果,另一方面为了应付新需求不断增加线程,因此浪费大量系统资源,同时线程也会占用大量的CPU来处理上下文切换,而且还容易遭受低速链接的攻击。 
      Node.js处理方法中第二个参数为一个回调函数,进程执行到db.query时,不会等待数据库返回结果,而是直接执行后面的语句,直到进入事件循环。当数据库返回查询结果时,会将事件发送到事件队列,等到线程进入事件循环后,才会调用函数执行后面的逻辑。

      程序会自动往下执行。
     
    7.浏览器引擎革命
     
        Google Chrome的引擎是V8。Node.js 的是引擎引用的就是V8。所以它快,为什么ExtJs在Chrome如此的快,就因为如此。
     
    8.部署node.js的环境
     
        Node.js官方:http:/nodejs.org  下载安装包。安装后。打开cmd的dos窗口
        运行node
                console.log("success")
     
    9.Node.js的优点:

      ⑴不需要放在 Nginx / Apache 后,Node.js本身就内置了一个HTTP模块

        NodeJS内建了一个HTTP服务器支持,可以轻而易举的实现一个网站和服务器的组合,不像PHP、Perl那样,在使用PHP的时候,必须先搭建一个Apache之类的HTTP服务器,然后通过HTTP服务的模块加载         CGI调用,才能将PHP脚本的执行结果呈现给用户。
      

        加载http模块之后,即可创建一个http服务器:
        var http = require('http');
        http.createServer(function(req, res) {
          res.writeHead(200, {'Content-Type': 'text/html'});
          res.write('<h1>Node.js</h1>');
          res.end('<p>Hello World</p>');
        }).listen(8080);

      ⑵Node.js 可以更精细的控制 Request 和 Response 的时间和内容

      ⑶能支持数万个并发连接

        

        ⑷采用事件驱动、异步编程,为网络服务而设计

    10.Node.js的缺点:

      ⑴可靠性低,不支持故障恢复

        当程序有错误发生时,整个进程就会结束,需要重新在终端中启动服务器。这一点在开发中无可厚非,但在产品环境下就是严重的问题了,因为一旦用户访问时触发了程序中某个隐含的bug,整个服务器就崩溃了,将无法继续为所有用户提供服务。在部署Node.js 应用的时候一定要考虑到故障恢复,提高系统的可靠性。 (后面讲多线程多进程支持的时候看看怎么解决的)

      ⑵单进程,单线程,默认支持单核CPU(支持多进程的方法)

      ⑶太新了,API还在成熟过程中

        因为异步的原因, 一些完整的逻辑不可避免的会被分割成很多小块, 放在不同的回调函数里去执行, 一旦项目巨大的话, 这种开发方式面临的风险不是一点点。不符合开发者的常规线性思路,往往需要把一个完整的逻辑拆分为一个个事件,增加了开发和调试难度。

        

        // 传统代码 var user = db.user.get('name');

              var article = db.article.get(user.id);

              var comment = db.comments.get(article.id);

        // 异步回调 db.user.get('name', function(err, user){

                 if(err) trow err; db.article.get(user.id, function(err, article){

                    if(err) throw err;

                    db.comments.get(article.id, function(){

                       if(err) throw err;

                      // doSomethingWithResults();

                    })

                 });

               });

  • 相关阅读:
    校园商铺-8商品模块-12接触商品与某商品类别的关联的实现
    centos 7访问windows共享文件夹
    怎样在CentOS 7.0上安装和配置VNC服务器
    【总结】教你怎么将centos7打造成桌面系统
    Centos 7安装gvim
    CentOS 7 安装virtualBox
    Centos 7中 vim 中文乱码
    CentOS 7 gedit编辑器中文乱码解决方法
    centos7支持ntfs
    delta
  • 原文地址:https://www.cnblogs.com/lizeren/p/7766824.html
Copyright © 2020-2023  润新知