本章内容

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. Boss Bo (主席树)

    主要想法:假设给你足够时间,那么就可以对每个点建议一颗线段树来查询了,但是需要将点全部按照某个特定的序列存进线段树,如代码是以树的深搜顺序作为指定顺序,这样以来我们既可以将数据查询分成诺干个区间进行查 ...

  2. 解决caffe绘制训练过程的loss和accuracy曲线时候报错:paste: aux4.txt: 没有那个文件或目录 rm: 无法删除"aux4.txt": 没有那个文件或目录

    我用的是faster-rcnn,在绘制训练过程的loss和accuracy曲线时候,抛出如下错误,在网上查找无数大牛博客后无果,自己稍微看了下代码,发现,extract_seconds.py文件的 g ...

  3. linux环境下tab键自动缩进4个空格

    1. 进入 root 模式 su root 2. 编辑 /etc/vimrc 文件 root@localhost /home/xiluhua/tscripts $ vi /etc/vimrc 3. 文 ...

  4. android studio 添加get,set方法快捷方式

    android studio 添加get,set方法快捷方式

  5. Chrome插件消息传递实例

    首先吐槽"360极速浏览器应用开发平台"的开发文档,在消息传递(http://open.chrome.360.cn/extension_dev/messaging.html)一节中 ...

  6. 动手动脑-Java的方法重载

    例: Using overloaded methods public class MethodOverload {  public static void main(String[] args) {  ...

  7. 大数据自学5-Python操作Hbase

    在Hue环境中本身是可以直接操作Hbase数据库的,但是公司的环境不知道什么原因一直提示"Api Error:timed out",进度条一直在跑,却显示不出表. 但是在CDH后台 ...

  8. 【gulp-sass】本地搭建sass开发环境

    首先去官网下载一下nodejs. 然后安装gulp: 选择一个目录执行命令行:npm init,一直回车生成package.json文件 再执行命令:npm install gulp --save-d ...

  9. [Android相机]通过手机摄像头识别环境亮度(转)

    源: [Android相机]通过手机摄像头识别环境亮度 iOS利用摄像头获取环境光感参数

  10. spring总结之二(Bean作用域、依赖注入)

    ### Bean的作用域:单例(singleton),多例(prototype) 1.单例模式:表示在任何地方使用对象,总是一个(对象是唯一的). (笔面试重点) 饿汉式 public class K ...