ylbtech-Tool-Runtime-Javascript-Node.js:Node.js |
Node.js是一个Javascript运行环境(runtime),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好。
V8引擎执行Javascript的速度很是快,性能很是好。Node.js是一个基于Chrome JavaScript运行时创建的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,很是适合在分布式设备上运行数据密集型的实时应用。前端
-
2009年2月,Ryan Dahl在博客上宣布准备基于V8建立一个轻量级的Web服务器并提供一套库。
-
2009年5月,Ryan Dahl在GitHub上发布了最第一版本的部分Node.js包,随后几个月里,有人开始使用Node.js开发应用。
-
2009年11月和2010年4月,两届JSConf大会都安排了Node.js的讲座。
-
2010年年末,Node.js得到云计算服务商Joyent资助,创始人Ryan Dahl加入Joyent全职负责Node.js的发展。
-
2011年7月,Node.js在微软的支持下发布
Windows版本。
V8引擎自己使用了一些最新的
编译技术。这使得用Javascript这类
脚本语言编写出来的
代码运行速度得到了极大提高,
又节省了开发成本。对性能的苛求是Node的一个关键因素。 Javascript是一个
事件驱动语言,Node利用了这个优势,编写出
可扩展性高的服务器。Node采用了一个称为“
事件循环(event loop)”的架构,使得编写可扩展性高的服务器变得既容易又安全。提升服务器性能的技巧有多种多样。Node选择了一种既能提升性能,又能减低开发复杂度的架构。这是一个很是重要的特性。并发编程一般很复杂且布满地雷。Node绕过了这些,但仍提供很好的性能。
Node采用一系列“
非阻塞”库来支持事件循环的方式。
本质上就是为文件系统、数据库之类的资源提供接口。向文件系统发送一个请求时,无需等待硬盘(
寻址并检索文件),硬盘准备好的时候非阻塞接口会通知Node。该模型以可扩展的方式简化了对慢资源的访问, 直观,易懂。尤为是对于熟悉
onmouseover、onclick等DOM事件的用户,更有一种似曾相识的感受。
虽然让Javascript运行于服务器端不是Node的独特之处,但倒是其一强大功能。不得不认可,
浏览器环境限制了咱们选择编程语言的自由。任何服务器与日益复杂的
浏览器客户端应用程序间共享代码的愿望
只能经过Javascript来实现。虽然还存在其余一些支持Javascript在服务器端运行的平台,但由于上述特性,Node发展迅猛,成为事实上的平台。
在Node
启动的很短期内,社区就已经贡献了大量的
扩展库(模块)。其中不少是链接数据库或是其余软件的驱动,但还有不少是凭他们的实力制做出来的很是有用的软件。
最后,不得不提到的是Node社区。虽然Node项目还很是年轻,但不多看到对一个项目如此狂热的社区。不论是新手,仍是专家,你们都围绕着项目,使用并贡献本身的能力,致力于打造一个探索、支持、分享、听取建议的乐土。
Node.js的优势
nodejs做为一个新兴的
前端框架,后台语言,有不少吸引人的地方:
RESTful API
单线程
Node.js能够
在不新增额外线程的状况下,依然能够对任务进行
并发处理 —— Node.js是
单线程的。它经过事件轮询(event loop)来实现并发操做,对此,咱们应该要充分利用这一点 ——
尽量的避免阻塞操做,取而代之,多使用非阻塞操做。
非阻塞IO
V8虚拟机
事件驱动
Node.js使用Module模块去
划分不一样的功能,
以简化应用的开发。Modules模块有点像C++语言中的类库。每个Node.js的类库都包含了十分丰富的
各种函数,好比
http模块就包含了和http功能相关的不少函数,能够帮助开发者
很容易地对好比http,tcp/udp等进行操做,还能够很容易的
建立http和tcp/udp的服务器。
要在程序中使用模块是十分方便的,只须要以下:
在这里,
引入了http类库,而且对http类库的引用存放在http变量中了。这个时候,node.js会在咱们应用中搜索是否存在
node_modules的目录,而且搜索这个目录中是否存在http的模块。若是node.js找不到这个目录,则会到全局模块缓存中去寻找,用户能够经过相对或者绝对路径,指定模块的位置,好比:
var myModule = require('./myModule.js');
模块中包含了不少功能代码片段,在模块中的代码大部分都是私有的,意思是在模块中定义的函数方法和变量,都只能在同一个模块中被调用。固然,能够将某些方法和变量暴露到模块外,这个时候可使用exports对象去实现。
Linux 下 Node.js的安装
下面介绍下Node.js的安装,首先在nodejs的网站上
根据操做系统下载相关的安装包,对于ubuntu
(linux)下的安装,能够以下进行:
sudo apt-get update
sudo apt-get install node
或者:
sudo aptitude update
sudo aptitude install node
Node.js就会在sid库,能够将它们增长到sources来源列表中
sudo echo deb http://ftp.us.debian org/debian/ sid main > /etc/apt/sources.list.d/sid.list
但要注意的是,在完成安装后,须要移走/etc/apt/sources.list.d/sid.list。
windows 下
官网现已提供
安装包和编译器,版本:v0.12.7 和相应的API 文档(English)
2013年09月30日,Node.js 0.10.20 发布。
改进处:
2013年09月24日,Node.js 0.10.19 发布。
改进处:
-
uv: 升级至 v0.10.17
-
npm: 升级至 1.3.11
-
readline: 从控制字符开始处理输入 (Eric Schrock)
-
configure: 新增 mips-float-abi (soft, hard) 选项 (Andrei Sedoi)
-
stream: 对象模式改成容许否值 (isaacs)
-
tls: 阻止读取返回冗余的值 (Nathan Rajlich)
-
tls: NPN 协议改成链接到本地 (Fedor Indutny)
2013年09月04日,Node.js 0.10.18 发布。
改进处:
2013年08月21日,Node.js 0.10.17 发布。
改进处:
-
uv: 升级至 v0.10.14
-
http_parser: 不接收 PUN/GEM 方法做为 PUT/GET (Chris Dickinson)
-
tls: 修复当读取的 ssl 被销毁时的声明 (Fedor Indutny)
-
stream: 当监听器被移除时抛出 'error' (isaacs)
-
dgram: 修复错误的 send() 的参数的声明 (Ben Noordhuis)
-
readline: 在退出终端原始模式前暂停 stdin (Daniel Chatfield)
2013年08月16日,Node.js 0.10.16 发布。
改进处:
-
v8: 修复 CVE-2013-2882 的后门
-
npm: 升级至 1.3.8
-
crypto: 修复 assert() 的十六进制数据输入 (Ben Noordhuis)
-
crypto: 修复 randomBytes() 错误路径的内存泄漏 (Ben Noordhuis)
-
events: 修复内存泄漏,不暴露事件名称 (Ben Noordhuis)
-
http: 正确处理 hex/base64 编码 (isaacs)
-
http: 提高 res.write(buf) 性能 (Ben Noordhuis)
-
stream: 修复双管道错误显示 (Eran Hammer)
具有书写JavaScript的IDE都可。普通的记事本也能够进行开发。
在几年的时间里,Node.JS逐渐发展成一个成熟的开发平台,吸引了许多开发者。有许多大型高流量网站都采用Node.JS进行开发,此外,开发人员还可使用它来开发一些
快速移动Web框架。
除了Web应用外,NodeJS也被应用在许多方面,本文盘点了NodeJS在其它方面所开发的十大使人神奇的项目,这些项目涉及到
应用程序监控、媒体流、远程控制、桌面和移动应用等等。
任何一套标准都由一个著名的程序开始:Hello World !
在Node中,
Http是首要的。Node为建立http服务器做了优化,因此你在网上看到的大部分示例和库都是集中在web上(
http框架、模板库等)。如下作了一个nodejs的Hello World 演示
:
var http = require('http');
server = http.createServer(function (req, res) {
res.writeHeader(200, {"Content-Type": "text/plain"});
res.end("Hello World\n");
});
server.listen(8000);
console.log("httpd start @8000");
本示例意图向读者传递 Node.js,关于 HTTP 处理过程的详实概念。在不考虑编程语言和环境的状况下,咱们假设您已经知晓一般状况下 HTTP 请求是如何工做的,而且对 Node.js 的
EventEmitters 和 Streams 也已知晓。若是您对他们并不熟悉,经过 API 文档能够快速查阅。
建立服务
Node 的网络应用都须要先建立一个网络服务对象,这里咱们经过
createServer 来实现。
var http = require('http');
var server = http.createServer(function(request, response) {
// handle your request
});
传入 createServer 的 function 在每次 HTTP 请求时都将被调用执行,所以这个 function 也被称为请求的处理者。事实上经过 createServer 返回的 Server 对象是一个 EventEmitter,咱们须要作的仅仅是在这里保存这个 server 对象,并在以后对其添加监听器。node
var http = require('http');
var server = http.createServer();
server.on('request', function(request, response) {
// handle your request
});
当 HTTP 请求这个服务时,node 调用请求处理者 function 并传入一些用于处理事务相关的对象:request 和 response。咱们能够很是方便的得到这两个对象。linux
var http = require('http');
var server = http.createServer();
server.on('request', function(request, response) {
// handle your request
}).listen(8080);
为了对实际的请求提供服务,在 server 对象上须要调用 listen 方法。绝大多数状况你须要传入 listen 你想要服务监听的端口号,这里也存在不少其余的可选方案,参见 API reference。web
一、百度百科
二、官网
2.一、
2.二、
三、
-------------------------------------------------------