zoukankan      html  css  js  c++  java
  • Node.js学习笔记1(简介)

            1.什么是Node.js?
            Node.js,或者 Node,是一个可以让 JavaScript 运行在服务器端的平台。它可以让 JavaScript 脱离浏览器的束缚运行在一般的服务器环境下,就像运行 Python、 Perl、 PHP、 Ruby  程序一样。你可以用 Node.js 轻松地进行服务器端应用开发,Python、Perl、PHP、Ruby 能 做的事情 Node.js 几乎都能做,而且可以做得更好。 
            Node.js 是一个为实时Web(Real-time Web)应用开发而诞生的平台,它从诞生之初就充分 考虑了在实时响应、超大规模数据要求下架构的可扩展性。这使得它摒弃了传统平台依靠多线 程来实现高并发的设计思路,而采用了单线程、异步式I/O、事件驱动式的程序设计模型。
            Node.js 是一个让 JavaScript 运行在服务 端的开发平台,它让 JavaScript 成为脚本语言世界的一等公民。
            Node.js 中所谓的 JavaScript 只是 Core JavaScript,或者说是 ECMAScript 的一个 实现,不包含 DOM、BOM 或者 Client JavaScript。这是因为 Node.js 不运行在浏览器中,所 以不需要使用浏览器中的许多特性。 
            Node.js 的 JavaScript 引擎是 V8,它的 JIT(Just-in-time Compilation,即时编译) 执行速度已经快到了接近本地代码的执行速度。Node.js 不运行在浏览器中,所以也就不存 在 JavaScript 的浏览器兼容性问题,你可以放心地使用 JavaScript 语言的所有特性。 
            2.Node.js能做什么?
    • 具有复杂逻辑的网站;  
    • 基于社交网络的大规模 Web 应用;  
    • Web Socket 服务器;  
    • TCP/UDP 套接字应用程序;  
    • 命令行工具;  
    • 交互式终端程序;  
    • 带有图形用户界面的本地应用程序;  
    • 单元测试工具;  
    • 客户端 JavaScript 编译器。
            Node.js 内建了 HTTP 服务器支持,也就是说你可以轻而易举地实现一个网站和服务器 的组合。而当你使用 Node.js 时,不用额外搭建一个 HTTP 服务器,因为 Node.js 本身 就内建了一个。这个服务器不仅可以用来调试代码,而且它本身就可以部署到产品环境,它 的性能足以满足要求。
            Node.js 还可以部署到非网络应用的环境下,比如一个命令行工具。
            3.异步式 I/O 与事件驱动 
            Node.js 最大的特点就是采用异步式 I/O 与事件驱动的架构设计。对于高并发的解决方 案,传统的架构是多线程模型,也就是为每个业务逻辑提供一个系统线程,通过系统线程切 换来弥补同步式 I/O 调用时的时间开销。Node.js 使用的是单线程模型,对于所有 I/O 都采用 异步式的请求方式,避免了频繁的上下文切换。Node.js 在执行的过程中会维护一个事件队 列,程序在执行时进入事件循环等待下一个事件到来,每个异步式 I/O 请求完成后会被推送 到事件队列,等待程序进程进行处理。 
            例如,对于简单而常见的数据库查询操作,按照传统方式实现的代码如下: 
            res = db.query('SELECT * from some_table');
            res.output(); 
            以上代码在执行到第一行的时候,线程会阻塞,等待数据库返回查询结果,然后再继续 处理。然而,由于数据库查询可能涉及磁盘读写和网络通信,其延时可能相当大(长达几个 到几百毫秒,相比CPU的时钟差了好几个数量级),线程会在这里阻塞等待结果返回。对于高并发的访问,一方面线程长期阻塞等待,另一方面为了应付新请求而不断增加线程,因此 会浪费大量系统资源,同时线程的增多也会占用大量的 CPU 时间来处理内存上下文切换, 而且还容易遭受低速连接攻击。  看看Node.js是如何解决这个问题的:  
            db.query('SELECT * from some_table', function(res) {
                      res.output();
            });
            这段代码中  db.query 的第二个参数是一个函数,我们称为回调函数。进程在执行到 db.query 的时候,不会等待结果返回,而是直接继续执行后面的语句,直到进入事件循环。 当数据库查询结果返回时,会将事件发送到事件队列,等到线程进入事件循环以后,才会调 用之前的回调函数继续执行后面的逻辑。
            Node.js 的异步机制是基于事件的,所有的磁盘 I/O、网络通信、数据库查询都以非阻塞的方式请求,返回的结果由事件循环来处理。图1-1 描述了这个机制。Node.js 进程在同一时 刻只会处理一个事件,完成后立即进入事件循环检查并处理后面的事件。这样做的好处是, CPU 和内存在同一时间集中处理一件事,同时尽可能让耗时的 I/O 操作并行执行。对于低速 连接攻击,Node.js 只是在事件队列中增加请求,等待操作系统的回应,因而不会有任何多 线程开销,很大程度上可以提高 Web 应用的健壮性,防止恶意攻击。 
            
            
  • 相关阅读:
    BZOJ3752 : Hack
    XIV Open Cup named after E.V. Pankratiev. GP of SPb
    XIII Open Cup named after E.V. Pankratiev. GP of Ukraine
    BZOJ2087 : [Poi2010]Sheep
    BZOJ2080 : [Poi2010]Railway
    BZOJ2082 : [Poi2010]Divine divisor
    Moscow Pre-Finals Workshop 2016. National Taiwan U Selection
    XIII Open Cup named after E.V. Pankratiev. GP of Asia and South Caucasus
    XIII Open Cup named after E.V. Pankratiev. GP of Azov Sea
    XIII Open Cup named after E.V. Pankratiev. GP of SPb
  • 原文地址:https://www.cnblogs.com/fireflow/p/4750021.html
Copyright © 2011-2022 走看看