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 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型实时应用

1. 发展史返回顶部
  • 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版本
2. 特性返回顶部
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虚拟机
事件驱动
 
3. 模块返回顶部
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对象去实现。
 
4. 安装返回顶部
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)
 
5. 版本发布返回顶部
2013年09月30日,Node.js 0.10.20 发布。
改进处:
  • tls: 修复偶尔发生的挂起和部分显示 (Fedor Indutny) - 修复 "npm ERR! cb() never called!"
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 发布。
改进处:
  • uv: 升级至 v0.10.15
  • stream: 不阻塞 unset _events 属性 (isaacs)
  • stream: 传递的 'buffer' 用可解码的方式进行编码 (isaacs)
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)
 
6. 集成开发环境返回顶部
具备书写JavaScript的IDE均可。普通的记事本也可以进行开发。
 
7. 应用方向返回顶部
在几年的时间里,Node.JS逐渐发展成一个成熟的开发平台,吸引了许多开发者。有许多大型高流量网站都采用Node.JS进行开发,此外,开发人员还可以使用它来开发一些快速移动Web框架
除了Web应用外,NodeJS也被应用在许多方面,本文盘点了NodeJS在其它方面所开发的十大令人神奇的项目,这些项目涉及到应用程序监控、媒体流、远程控制、桌面和移动应用等等。
 
8. 示例程序返回顶部
任何一套标准都由一个著名的程序开始: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");
9. 事务处理示例返回顶部
本示例意图向读者传递 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 对象,并在之后对其添加监听器

var http = require('http');
var server = http.createServer();
server.on('request', function(request, response) {
// handle your request
});

当 HTTP 请求这个服务时,node 调用请求处理者 function 并传入一些用于处理事务相关的对象:request 和 response。我们可以非常方便的获得这两个对象。

var http = require('http');
var server = http.createServer();
server.on('request', function(request, response) {
// handle your request
}).listen(8080);

为了对实际的请求提供服务,在 server 对象上需要调用 listen 方法。绝大多数情况你需要传入 listen 你想要服务监听的端口号,这里也存在很多其他的可选方案,参见 API reference。

10.返回顶部
1、百度百科
2、官网
2.1、
2.2、
3、
-------------------------------------------------------
 
11.返回顶部
 
作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

杂项:node.js的更多相关文章

  1. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  2. 利用Node.js的Net模块实现一个命令行多人聊天室

    1.net模块基本API 要使用Node.js的net模块实现一个命令行聊天室,就必须先了解NET模块的API使用.NET模块API分为两大类:Server和Socket类.工厂方法. Server类 ...

  3. Node.js:进程、子进程与cluster多核处理模块

    1.process对象 process对象就是处理与进程相关信息的全局对象,不需要require引用,且是EventEmitter的实例. 获取进程信息 process对象提供了很多的API来获取当前 ...

  4. Node.js:理解stream

    Stream在node.js中是一个抽象的接口,基于EventEmitter,也是一种Buffer的高级封装,用来处理流数据.流模块便是提供各种API让我们可以很简单的使用Stream. 流分为四种类 ...

  5. Node.js:Buffer浅谈

    Javascript在客户端对于unicode编码的数据操作支持非常友好,但是对二进制数据的处理就不尽人意.Node.js为了能够处理二进制数据或非unicode编码的数据,便设计了Buffer类,该 ...

  6. node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法

    1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...

  7. Node.js npm 详解

    一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...

  8. Node.js入门(一)

    一.Node.js本质上是js的运行环境. 二.可以解析js代码(没有浏览器安全级的限制): 提供系统级的API:1.文件的读写 2.进程的管理 3.网络通信 三.可以关注的四个网站: 1.https ...

  9. Node.js学习笔记——Node.js开发Web后台服务

    一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...

随机推荐

  1. L1-041 寻找250

    对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字. 输入格式: 输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”. ...

  2. DevExpress v17.2新版亮点—Windows 10篇

    用户界面套包DevExpress v17.2日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了Windows 10 Controls v17.2 的新功能,快来下载试用新版本! ...

  3. <NET CLR via c# 第4版>笔记 第16章 数组

    //创建一个一维数组 int[] myIntegers; //声明一个数组引用 myIntegers = new int[100]; //创建含有100个int的数组 //创建一个二维数组 doubl ...

  4. reboot 后 Docker服务及容器自动启动设置

    https://blog.csdn.net/wxb880114/article/details/82904765 重启reboot操作系统后,发现docker 服务未启动,容器也未启动,天生反骨,怎么 ...

  5. 冷知识:excel 2013有多少行列

    XFD1048576 列:24*26*26+6*26+4=16384 行:2^20=1048576

  6. Redis学习第七课:键值命令和服务器命令

    Redis键值相关命令                                                                                          ...

  7. 【c++基础】vector初始化的几种方式

    前言 STL中的vector有几种初始化方式,根据不同的需求选择合适的初始化方式. 源码 // constructing vectors #include <iostream> #incl ...

  8. Spring DI

    一.   Spring DI 依赖注入 利用spring IOC实例化了对象,而DI将实例化的对象注入到需要对象的地方,完成初始化任务. 对象由spring创建,之后再由spring给属性赋值 spr ...

  9. PHP CURL HTTPS内存泄露问题

    还原场景:通过一直运行脚本,向微信用户发送模板消息,发现运行了一段时间,内存就爆了,然后立马看了一下代码,发现跟其他的消息逻辑一模一样,唯一不一样的就是请求了微信的接口:然后继续开始找问题,发现当时使 ...

  10. 斐波那契数列的5种python实现写法

    斐波那契数列的5种python写法       斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖 ...