第一章(欢迎进入node.js世界)
本章内容
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世界)的更多相关文章
- 简学Python第一章__进入PY的世界
#cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...
- Practical Node.js (2018版) 第7章:Boosting Node.js and Mongoose
参考:博客 https://www.cnblogs.com/chentianwei/p/10268346.html 参考: mongoose官网(https://mongoosejs.com/docs ...
- Node.js之路【第一篇】初识Node.js
什么是Node.js 1.Node.js就是运行在服务端的JavaScrip. 2.Node.js是一个基于Chrome JavaScrip运行时简历的一个平台. 3.Node.js是一个非阻塞I/O ...
- Practical Node.js (2018版) 第10章:Getting Node.js Apps Production Ready
Getting Node.js Apps Production Ready 部署程序需要知道的方面: Environment variables Express.js in production So ...
- 第一天 :学习node.js
① node.js环境配置 我学过的语言最简单的一门 直接百度就可以配置 ② 每个入门 的程序都是从helloworld开始 代码如下 : var http=require('http'); http ...
- 欢迎进入Node.js世界
官网上(http://www.nodejs.org )给Node下的定义是:”一个搭建在Chrome JavaScript 运行时上的平台,用于构建高速.可伸缩的网络程序.Node.js采用的事件驱动 ...
- 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 ...
- 初学node.js有感二
node.js进阶 一.回顾与继续 对于一种语言的认识都是经历这样的一个过程的,首先从原生的环境(CMD)中开始学习,找到一门语言之间各种引用的本质和相互之间的调用方式,明澈各种依赖关系,在这个基 ...
- 玩儿转物联网IoT - 在Beagle Bone Black上运行node.js 程序
物联网(IoT)技术方兴未艾,智能手环,智能血压计,智能眼镜甚至智能鞋垫都开始进入我们的生活,各种智能设备层出不穷,世界已经到了一个"人有多大胆,地有多大产"的时代,不玩儿点物联网 ...
随机推荐
- 即时通信系统中实现全局系统通知,并与Web后台集成【附C#开源即时通讯系统(支持广域网)——QQ高仿版IM最新源码】
像QQ这样的即时通信软件,时不时就会从桌面的右下角弹出一个小窗口,或是显示一个广告.或是一个新闻.或是一个公告等.在这里,我们将其统称为“全局系统通知”.很多使用C#开源即时通讯系统——GGTalk的 ...
- Qt—MVC架构
[1]代理应用示例源码 用代码说事,比较靠谱. 代码目录:三个自定义类,重实现QStyledItemDelegate类.main函数应用示例. (1)ComboDelegate.h #ifndef C ...
- 如何删除自己上传的CSDN资源(亲测有效)
今天发现有一个资源上传错了,想重新上传,删掉以前的资源,才发现CSDN并没有提供删除资源的功能,然后去网上搜了下,这才删除了,不知道怎么删除的小伙伴看过来~ 1.首先,找到自己想要删除资源的页面,举个 ...
- 基于FPGA摄像头图像采集显示系统
本系统主要由FPGA主控模块.图像采集模块.图像存储模块以及图像显示模块等模块组成.其中图像采集模块选择OV7670摄像头模块,完成对视频图像的采集和解码功能,并以RGB565标准输出RGB 5:6: ...
- ATM-JAVA程序 //程序有5处相同错误,找不出原因 转账功能没有实现,修改密码来不及实现了
package JCC;//信1705-3 20173681 靳晨晨import java.io.BufferedReader;import java.io.File;import java.io.F ...
- 典型 python 小练习
#格式化输出 3方式a=input('user:').strip()print('%s'%a) #%s 占位符a1=[1,2,3]print(f'333{a1}早') #法二print('ss{0}k ...
- [转载]DLL命名规则
程序集是一个部署单元,同时还代表托管代码程序的身份.一般来说一个程序集仅与一个DLL相对应.本节主要讲DLL命名约定,程序集的命名约定与此类似. 要记住,名字空间与DLL和程序集是不同的概念.名字空间 ...
- CAT Caterpillar ET is really a exceptional obd2 solution
As a excellent obd2 solutions,Heavy Duty Diagnostic CAT Caterpillar ET Diagnostic Adapter features a ...
- flask框架----flask-script组件
Flask Script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任 ...
- The Little Prince-12/02
The Little Prince-12/02 What moves me so deeply, about this little prince who is sleeping here, is h ...