本章内容

1:Node.js是什么

2:服务器端javascript

3:node的异步和事件触发本质

4:node为谁而生

5:node程序示例

  1.1

  node.js他的首次亮相是在2009年,非常流行,它在github受关注项目排行榜上位列第二(https://github.com/joyent/node),node创始人Ryan Dahl 2009年柏林JSCONF的网站上有node创始人Ryan Dahl第一次介绍node的视频。(已被拿掉)

  官网上(http://www.nodejs/org)给node下的定义是:“一个搭建在Chrome JavaScript运行时上的平台,用于构建高速、可伸缩的网络程序。node.js采用的事件驱动、非阻塞I/O模型,使他既轻量又高效,并成为构建运行在封不上设备锁的数据密集型实时程序的完美选择。‘’

  无论好坏,Javascript都是世界上最流行的编程语言,几乎遍布web上的每个角落,比较引入注目的先行者是Google地图和gmail,但类似的web应用有一大堆,从Twitter到facebook,再到github。

  现代化JavaScript虚拟机的性能正在改变着可以构建在web上的应用类型。一个很有说服力的、坦率地说是令人震撼的例子是jslinux,一个运行在JavaScript中的PC模拟器,它能加载Linux内核,可以利用终端会话与其交互,还能编写C城西,而这一切都是在浏览器中完成的。

  json是目前非常流行的数据交换格式,并且还是JavaScript原生的。

  有些nosql数据库中庸的就是JavaScript语言(couchDB和MongoDB)。

  JavaScript是一门编译目标语言,现在有很多可以编译成JavaScript语言。

  node用的虚拟机V8会紧跟ECMAScript标准。换句话说,在node中如果想用新的JavaScript语言特性,不用等到所有浏览器都支持。

  JavaScript成了一种引人瞩目的编写服务端应用的语言,Node已经赚足了眼球。但JavaScript知识整幅拼图中的一块,node使用Javascript的方式更加有趣。

  

  1.2异步和事件触发:浏览器

  node为服务端JavaScript提供了一个事件驱动的、异步的平台。它把JavaScript带到了服务端中的方式跟浏览器把JavaScript带到了客户端的方式几乎一模一样。他们都是事件驱动(事件轮询)和非阻塞的I/O处理(用异步I/O)。

  例:

  $.post('',function(data){

  console.log(data);

  //脚本继续执行

  });

  var = data = $.post('/resource.json');

  console.log(data);//被阻塞,需要执行完上一行再执行

  

  1.3异步和事件触发:服务器

  在node中,I/O几乎总数在主事件轮询之外进行,是的服务器可以一直处于高效并且随时能够做除响应的状态,就像Nginx一样。这样进程不会受I/O限制,因为I/O延迟不会拖垮服务器,或者像在阻塞方式下那样占很多资源。因此曾经在服务器上是重量级的操作,在node服务器上仍然可以是轻量级的。

  1.4DIRT程序

  Node所针对 的应用程序有一个专门的简称:DIRT。他表示数据密集型实时程序(data-intensive real-time),因为node自身在I/O上非常轻量,它善于将数据从一个管道混排或代理到另一个管道上,这能在处理大量请求时持有很多开放的连接,并且只占用一小部分内存,它的设计目标是保证相应能力,跟浏览器一样。

  对于web来说,实时程序是个新生事物。现在有很多web程序提供的信息几乎都是即时的,比如通过白板在线协作,对临近公交车的实时精准定位,以及多人在线游戏。不管是实时组件增强已有程序,还是打造全新的程序,web都在朝着响应式和协作型环境逐渐开发。而这种新型的web应用程序需要一个能够实时响应大量并发用户请求的平台来支撑他们。这正是node所擅长的领域,并不局限于web程序,其他的I/O负载比较重的程序也可以用到它。

  Browserling就是一个用Node开发的DIRT程序,它是一个很好的范例。在这个网站上我们可以在浏览器中使用各种浏览器。这对web前端开发工程师来说特别有用。

  

  1.5:默认DIRT

  node从构建开始就有一个事件驱动和异步的模型。JavaScript从来没有过标准的I/O库,那是服务端语言常见的配置。对于JavaScript而言,这总数有宿主环境决定的,JavaScript最常见的宿主环境,也是大多数开发人员所用的,就是浏览器,他是事件驱动和异步的。

  node重新实现了宿主中哪些常用的对象,尽量让浏览器和服务器保持一致,比如:

  计时器API(setTimeout)

  控制台API(console.log)

  

  1.5.1简单的异步程序

  $.post('',function(data){ console.log(data) })

  require(res).readFile('./resource,json',function(error,data){  })

  1.5.2hello world HTTP服务器

  var http = require('http');

  http.createServer(function(req,res){

  res.writeHead(200,{'Content-Type':'text/plain'});

  res.end('hello world')

  }).listen(3000);

  console.log('server running')    

  1.5.3流数据

  node在数据流和数据流动上也很强大。你可以吧数据流看成特殊的数组,只不过数组中的数据分散在空间上,而数据流中的数据时分散在时间上的,通过将数据一块一块地传送,开发人员可以每收到一块数据就开始处理,而不用等到所有数据都到全了再做处理。

  只要有新的数据块准备好,就会激发data事件,当所有数据库都加载完之后,会激发一个end事件。

  node中也有可写数据流,可以往里写数据块。当http服务器上有情趣过来时,对其进行相应的res对象就是可写的数据流的一种。

第一章(欢迎进入node.js世界)的更多相关文章

  1. 简学Python第一章__进入PY的世界

    #cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...

  2. Practical Node.js (2018版) 第7章:Boosting Node.js and Mongoose

    参考:博客 https://www.cnblogs.com/chentianwei/p/10268346.html 参考: mongoose官网(https://mongoosejs.com/docs ...

  3. Node.js之路【第一篇】初识Node.js

    什么是Node.js 1.Node.js就是运行在服务端的JavaScrip. 2.Node.js是一个基于Chrome JavaScrip运行时简历的一个平台. 3.Node.js是一个非阻塞I/O ...

  4. Practical Node.js (2018版) 第10章:Getting Node.js Apps Production Ready

    Getting Node.js Apps Production Ready 部署程序需要知道的方面: Environment variables Express.js in production So ...

  5. 第一天 :学习node.js

    ① node.js环境配置 我学过的语言最简单的一门 直接百度就可以配置 ② 每个入门 的程序都是从helloworld开始 代码如下 : var http=require('http'); http ...

  6. 欢迎进入Node.js世界

    官网上(http://www.nodejs.org )给Node下的定义是:”一个搭建在Chrome JavaScript 运行时上的平台,用于构建高速.可伸缩的网络程序.Node.js采用的事件驱动 ...

  7. Practical Node.js (2018版) 第8章:Building Node.js REST API Servers

    Building Node.js REST API Servers with Express.js and Hapi Modern-day web developers use an architec ...

  8. 初学node.js有感二

    node.js进阶 一.回顾与继续   对于一种语言的认识都是经历这样的一个过程的,首先从原生的环境(CMD)中开始学习,找到一门语言之间各种引用的本质和相互之间的调用方式,明澈各种依赖关系,在这个基 ...

  9. 玩儿转物联网IoT - 在Beagle Bone Black上运行node.js 程序

    物联网(IoT)技术方兴未艾,智能手环,智能血压计,智能眼镜甚至智能鞋垫都开始进入我们的生活,各种智能设备层出不穷,世界已经到了一个"人有多大胆,地有多大产"的时代,不玩儿点物联网 ...

随机推荐

  1. 20165215 2017-2018-2 《Java程序设计》第八周学习总结

    20165215 2017-2018-2 <Java程序设计>第八周学习总结 教材学习内容总结 进程与线程 进程是程序的一次动态执行过程,它对应了从代码加载.执行至执行完毕的一个完整过程. ...

  2. php获得可靠的精准的当前时间 ( 通过授时服务器 )

    有一种情形是这样子的,比如机票业务中的订票流程,我们需要一个非常可靠的当前时间来支持,尽管大多数服务器的时间是非常准确的,我们使用time()来获取的时间是可靠的,但未免会有不确切的情况,也有的服务器 ...

  3. 算法提高 c++_ch02_01 (强制类型转换)

    编写一个程序,利用强制类型转换打印元音字母大小写10种形式的ASCII码. 输出的顺序为:大写的字母A,E,I,O,U的ASCII码,小写的字母a,e,i,o,u的ASCII码.所有的ASCII码都用 ...

  4. linux /etc/shadow--passwd/pam.d/system-auth文件详解

     在linux操作系统中, /etc/passwd文件中的每个用户都有一个对应的记录行,记录着这个用户的一下基本属性.该文件对所有用户可读.   而/etc/shadow文件正如他的名字一样,他是pa ...

  5. web前端学习路线(含20个真实web开发项目集合)

    目前web前端工程师日均岗位缺口已经超过50000,随着互联网+的深入发展,html5作为前端展示技术,市场人才需求量将呈直线上涨. Web前端工程师的岗位职责是利用HTML.CSS.Java.DOM ...

  6. 几张图看明白VAO、VBO、EBO的关系和代码顺序

    0.详细教程可看https://learnopengl-cn.github.io/01%20Getting%20started/04%20Hello%20Triangle/ 1.可以简单地认为VAO的 ...

  7. sql server 触发器的简单用法

    触发器  -- 一下写的都是我对触发器的理解 当在执行insert . delete . 等操作的时候 随便要做一些额外的操作, 比如在添加的时候就会将新添加的数据存到inserted表中 写个实例 ...

  8. mysql启动、关闭与登录

    按照上述三篇随笔中的方法安装mysql,其启动.关闭和登录方法如下. mysql启动基本原理:/etc/init.d/mysqld是一个shell启动脚本,启动后最终会调用mysql\bin\mysq ...

  9. P2044 [NOI2012]随机数生成器

    洛咕原题 正常的矩乘题. 但是,计算过程中会爆long long. 所以,我们要用快速(龟速)乘来解决. 快速乘,也就是把快速幂稍作修改.乘法被分成若干个加法,以时间为代价解决精度问题. #inclu ...

  10. windows 10下oracle相关异常及处理方法

    话说起来,不以oracle性能优化,数据库维护为主业已经有四五年了,这两年基本上以mysql为主. pl/sql登录后提示空白对话框.将ORACLE_HOME设置为oracle 11g的目录. IMP ...