学习NodeJS第一天:node.js引言

Node.JS 是资深 C 程序员 Ryan Dahl(http://four.livejournal.com/)的作品,依据 Google 著名的开源 JavaScript 引擎 V8 来进行二次开发的 Web I/O 服务器(http://nodejs.org/)。V8 本身是非常快的 JavaScript 引擎,处理 JS 执行运行的速度非常高。相关测试表明,FireFox、Opera 和 IE 的 JS 引擎速度都不及 V8 来得快。而且,还可以说,只要浏览器之间的 JS 引擎大战一日不减,NodeJs
就可以从中受益。有竞争才有进步:)。

NodeJS 基本用法也是十分简单明了的,我们看看一下这一句,就是最简单的代码:
var
sys = require('sys')
,http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('Hello World');
res.close();
}).listen(8006);
sys.puts('Server running at http://127.0.0.1:8006/');

以上语句 var http = require('http');http.createServer(function (req, res) {…}); 就是创建一个 HTTP 服务器,侦听来自客户端的请求,匿名参数中的 req 和 res 分别代表请求对象和响应对象。NodeJS 把逻辑语句写在一个函数中,说明创建服务器 createServer() 连这一步骤都是异步的!而且除此之外,req 也有相关的异步操作:
http.createServer(function (req, res) {
req.addListener("end",function(){
sys.puts("request end");
});
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('Hello World');
res.close();
}).listen(8006);

这样就对请求 req 登记了 end 的事件。在请求结束时通过 sys.puts 方法加入"request end"。在使用事件的过程中,实质也算是一个异步过程,非同步的。

从宏观层面看以上的演示,上面仅仅是一个比较底层的操作,都是低层次的控制,不足以提供更多 High Level 逻辑。要增强 NodeJS 这个平台功能,我们可以使用其他围绕 NodeJS 而开发模块,甚至是一个初具规模的“框架”,——其中一个就是 Express(http://github.com/visionmedia/express)。安装 Express 的前提是安装另一个依赖包:Kiwi(http://github.com/visionmedia/kiwi),然后键入kiwi -v install express
才可以正式安装 Express。安装好 Express 之后,立刻输入下面代码测试一下:
var sys = require("sys"),
kiwi = require("kiwi"),
express = kiwi.require('express');

get('/', function(){
this.redirect('/hello/world')
});

get('/hello/world', function(){
return 'Hello World'
});

get('/goodbye/world', function(){
return 'Goodbye World'
});

run();
Express 运行的 URL 和端口是 http://localhost:3000,默认请求的规则都会被转移到 /hello/world 目录,返回 'Hello World' 的字符串。访问 /goodbye/world 目录就返回 'Goodbye World'。Express 之所以被称为一个“框架”,应该还有其他的功能在内,例如请求路由、渲染视图的其他高级功能。

Web服务器的事件编程其意义
我们知道并且十分清楚,JavaScript 是单线程的(就当前流行的 js v1.5而言),怎么避免 I/O 通道上的阻塞(block)呢?——基于事件驱动(Event-based)的编程或者或者是一种可行之道,为不少后台程序解决线程/阻塞之用。自从 Viusal Basic 流行起,基于事件驱动的编程模型在GUI之上早已为我们所熟悉,存在很长的一段时间了。若说上早期的开发,那时我们经常的一个做法,就是在main()方法写一个无限循环(while(true) loop),从而获得控制任何时刻程序的能力,亦算是一种朴素的“事件”模型。我们清楚,JavaScript天然是Function
First Level的,对一个函数还可以送入一个函数的参数(即传入一个闭包closure),换言之,JS天生与事件驱动的编程是不谋而合,相得益彰的。鉴于此,Node.js的事件编程理念的确是一个亮点。

另外一点,高并发的 Web 服务器一直乃久经不衰的热点和话题,也许有很多的解决方案,性能达到一定的指标也没有问题,不过问题是,因而,在保证并满足性能达标的前提下,却很少见一个自然、适合编写业务逻辑的开发平台,以 JavaScript 为开发语言的 NodeJS 正好符合这一需求,一种符合大多数人需求的 DSL(估计 js 玩家数量可观得可以……)。例如,一个简单的计数器设计,我登录某个 url,就触发一个计数器的事件,十分自然。当然,更重要的是,还是 JS 的语言特征,即 Function、闭包、相似的
C 语法、精炼与简洁的风格等等,尤其 Function,简直为事件模型而生,轻松吻合 node.js 异步机制的理念,才是真正吸引玩家去乐此不疲的原因。

尽管 NodeJS 现在还非常的年轻,也没有久经世故,不过值得可喜的是,现在涌现了一大批围绕 NodeJS 的插件、增强包,有的是链接数据库,有的是用于 logging、Template模板、单元测试,有的还是服务于长链接下(long polling)轮询的……等等。我们可以参见 NodeJS 具体的模块列表,在http://wiki.github.com/ry/node/modules。

 

分享一个 Node.js 的专题网站,适合初学者:

http://howtonode.org/

nodejs与websocket的资源:

http://blog.new-bamboo.co.uk/2009/12/7/real-time-online-activity-monitor-example-with-node-js-and-websocket

http://blog.johngoulah.com/2010/03/nodejs-websockets-and-the-twitter-gardenhose/http://blog.andregoncalves.com/2009/12/29/Nodejs-twitter-streaming-with-html5-websockets.html

写node.js的插件(C++)

https://www.cloudkick.com/blog/2010/aug/23/writing-nodejs-native-extensions/

在win平台上跑node.js,借助虚拟机:

http://www.lazycoder.com/weblog/2010/03/18/getting-started-with-node-js-on-windows/

在win直接运行的可执行文件(已编译):

http://www.grati.org/?page_id=213 不错的node.js中文资源

时间: 2024-10-03 14:58:27

学习NodeJS第一天:node.js引言的相关文章

Node.js入门学习笔记

关于Node.js介绍,我们引用官网(http://nodejs.org/)的一段文字说明: 1 Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and ef

深入理解Node.js的HTTP模块_node.js

前言 我们知道传统的HTPP服务器会由Aphche.Nginx.IIS之类的软件来担任,但是nodejs并不需要,nodejs提供了http模块,自身就可以用来构建服务器,而且http模块是由C++实现的,性能可靠.其中封装了一个高校的HTTP服务器和一个简单的HTTP客户端.http.Server是一个基于事件的HTTP服务器:http.request则是一个HTTP客户端工具,用于向HTTP服务器发送请求,实现内容抓取. 一. HTTP服务器 http.Server提供一套封装级别很低的AP

学习NodeJS第二天:漫谈NodeJS

缘起-- 新型的服务端正在进入我们的视野,让我们投入了关注的目光,例如近来的 NodeJS 算比较抢眼的一员. 之所以创造 NodeJS ,引用原作者 Ryan 之语,目标是为了可以更轻松地编写具有可伸缩性的网络程序.咋一想,这样的目标作为网络开发人员们何曾不想拥有.--于是看看Nodejs 是怎么实现的.首先由浅入深说下简单的概念:无论是复杂的业务逻辑,还是简单的"HelloWorld"也罢,客户端发送链接过来,Web 服务器肯定要一一全单照收,不会拒"链接"于千

Node.js如何自动审核团队的代码_node.js

前言 在团队开发中,无论是写前端(js,css,html) ,还是后端 ,我们常常需要解决一个问题:如何统一团队代码风格. 这篇文章主要是使用pre-git , eslint , js-beautify 实现代码风格控制. 下面分别介绍这三个工具和使用方式: pre-git 该工具能实现git hook的功能,在git的流程中插入一些自定义行为,例如commit之前执行代码检测,如果不通过则报错. eslint 代码格式审核工具,可以随意组合配置各种风格,用于组成团队的代码统一规范. js-be

Node.js连接postgreSQL并进行数据操作_node.js

前言 PostgreSql是一个面向对象的关系数据库,postgis是一个基于PostgreSql的空间数据库插件,主要用于管理地理空间数据.因此在GIS领域,广泛使用PostgreSql作为空间数据库. 首先使用npm安装数据库连接模块: npm install --save pg 连接池创建 然后代码中引入pg模块,并编写数据库配置: var pg = require('pg'); // 数据库配置 var config = { user:"postgres", database:

在linux中使用包管理器安装node.js

 这篇文章主要介绍了在linux中使用包管理器安装node.js的方法以及具体安装过程,非常详细,推荐给大家,有需要的小伙伴参考下吧.     网上文章中,在linux下安装node.js都是使用源码编译,其实node的github上已经提供了各个系统下使用各自的包管理器(package manager)安装node.js的方法. 1. 在Ubuntu中,使用如下命令:   代码如下: curl -sL https://deb.nodesource.com/setup | sudo bash -

Linux 有问必答:如何在 Linux 上安装 Node.js

Linux 有问必答:如何在 Linux 上安装 Node.js 问题: 如何在你的 Linux 发行版上安装 Node.js? Node.js 是建立在谷歌的 V8 JavaScript 引擎服务器端的软件平台上.在构建高性能的服务器端应用程序上,Node.js 在 JavaScript 中已是首选方案.是什么让使用 Node.js 库和应用程序的庞大生态系统来开发服务器后台变得如此流行.Node.js 自带一个被称为 npm 的命令行工具可以让你轻松地安装它,进行版本控制并使用 npm 的在

《Node.js入门经典》一2.9 小结

2.9 小结 Node.js入门经典 在本章中,我们学习了如何安装Node.js的包管理器npm.此外,也学习了如何使用npm安装模块以及如何在Node.js应用程序中使用它们.我们学习了本地安装模块和全局安装模块的区别,以及如何寻找模块文档.最后,我们学习了如何使用package.json来声明应用程序中的依赖关系.

测试您的Node.js知识和技能

测试您的 http://www.aliyun.com/zixun/aggregation/13375.html">Node.js 知识和技能,您能够快速了解您对从此学习17895.html">路线图中学到的关键信息和编程技能的掌握程度. 这些练习和解决方案对 developerWorks 学习路线图 "全面认识 Node.js" 进行了补充. 将这个简单的节点 Web 应用程序转换为 Coffeescript: var express = require