1. Node.js介绍
Ryan Dahl在V8引擎之上创建JavaScript环境,由于
•V8引擎极快
•V8专注于Web,在处理HTTP协议、DNS协议和TCP协议等事务上驾轻就熟
•JavaScript在Web上人尽皆知
Node.js是一个事件驱动的 服务器端Javascript环境,专注于网络以及创建网络交互的软件。
Hello World 服务端server.js
var http = require ('http');
http.createServer(function (req,res) {
res.writeHead(200,{'Content-Type':'text/plain'});
res.end('Hello World\n');
}
).listen(3000,'127.0.0.1');
运行node server.js,并打开浏览器输入127.0.0.1:3000
2. Node包管理器NPM
npm(node package manager)在Node.js中创建、共享并重用模块。
使用模块 var module = require('module');
安装模块 npm install underscore
模块来源
非官方来源 http://blago.dachev.com/modules http://toolbox.no.de/
本地安装:将项目安装在本地一个名为node_modules的文件夹下,以便项目使用,默认是这种方式。
全局安装:有些模块带有可执行文件,你希望能够在文件系统的任何位置都能运行这些可执行文件。加-g参数 npm install -g express
模块文档
npm docs underscore 打开 浏览器指向所提供的帮助页面
npm bugs underscore 查看bug
npm edit underscore
使用package.json指定依赖关系
利用package.json文件来管理模块,在项目根目录创建相关json文件,运行npm install
{
"name": "example02",
"version": "0.0.1",
"dependencies": {
"underscore": "~1.2.1"
}
}
3. Node.js的作用
Node.js是构建在Chrome的JavaScript运行时之上的一个平台,用于简单快速的、可扩展的网络应用程序,Node.js使用事件驱动的、非阻塞的I/O模型,这让其既轻量又高效,是运行于不同发布设备上的数据密集型实时应用程序的完美平台。
网络上I/O是不可预测的
Node的事件化的I/O模型让我们无须担心互锁和并发这两个在多线程异步I/O中常见的问题。
JavaScript是一个事件驱动型语言
4. 回调
函数可以作为参数传递到另外一个函数中,然后被调用。
同步(阻塞)指代码的执行会在函数返回之前停止,如果某个操作阻塞,脚本将无法继续执行。
异步(非阻塞)指基于回调的、允许脚本并行执行操作的方法,脚本无需等待某个操作的结果才能继续前进,因为操作结果会在事件发生时由回调来处理。
Node.js使用JavaScript的事件循环Event Loop来支持其所推崇的异步编程风格。基本上,事件循环使得系统可以将回调函数先保存起来,而后事件在将来发生时再运行。
Node.js经常被当做一个网络编程框架,因为它的设计旨在处理网络中数据流的不确定性。
由于事件循环以单一进程为基础,为了确保高性能需要遵循以下规则:
• 函数必须快速返回• 函数不得阻塞
• 长时间运行的操作必须移动另一个进程中
事件循环Loopage
并发处理的两种方法:thread、Event Loop
|
Pro 优点
|
Con缺点
|
Thread
|
•No rethinking is necessary.
•Blocking programs are ok.
•Execution continues as long as any thread is not
blocked.
|
•Stack memory per thread.
•If two threads use the same memory, a race may occur.
•Overhead.
•Deadlock.
•Thinking about reliability is extremely difficult.
•System/Application confusion
|
Event Loop
|
•Completely free of races and deadlocks.
•Only one stack.
•Very low overhead.
•Resilient. If a turn fails, the program can still go on
|
•Programs must never block.
•Programs are inside out! Waa!
•Turns must finish quickly
|