【第一节 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能够完成其余后台语言能完成的工做。html

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

3.Node.js为何会出现?java

  之前是没有人会想到用JavaScript做为本身的web server 这是由于什么呢?由于JavaScript是比较慢和乱 node


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

  因此,Node.js的产生因素:数据库

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

4.交互式运行环境:PEPLnpm

      Node.js提供了一个交互式运行环境,经过这个环境,能够当即执行JS代码,使用方法相似于Chrome浏览器中Firebug插件中的Console。编程

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

      查看系统中安装的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();

                })

             });

           });

相关文章
相关标签/搜索