学习NodeJS第一天:node.js引言
Node.JS 是资深 C 程序猿 Ryan Dahl(http://four.livejournal.com/)的作品,根据 Google 著名的开源 JavaScript 引擎 V8 来进行二次开发的 Web I/O server(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 server,侦听来自client的请求,匿名參数中的 req 和 res 分别代表请求对象和响应对象。NodeJS 把逻辑语句写在一个函数中,说明创建server 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 和port是 http://localhost:3000,默认请求的规则都会被转移到 /hello/world 文件夹,返回 'Hello World' 的字符串。訪问 /goodbye/world 文件夹就返回 'Goodbye World'。Express 之所以被称为一个“框架”,应该还有其它的功能在内,比如请求路由、渲染视图的其它高级功能。
Webserver的事件编程其意义
我们知道而且十分清楚,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 server一直乃久经不衰的热点和话题,或许有非常多的解决方式,性能达到一定的指标也没有问题,只是问题是,因而,在保证并满足性能达标的前提下,却非常少见一个自然、适合编写业务逻辑的开发平台,以 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 的专题站点,适合刚開始学习的人:
nodejs与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中文资源
学习NodeJS第一天:node.js引言的更多相关文章
- 学习Nodejs:《Node.js开发指南》微博项目express2迁移至express4过程中填的坑
<Node.js开发指南>项目地址https://github.com/BYVoid/microblog好不容易找到的基础版教程,但书中是基于express2的,而现在用的是express ...
- 学习NodeJS第一天:node.js介绍
Node.JS 前辈 C 程序猿 Ryan Dahl(http://four.livejournal.com/)工程,根据 Google 著名的开源 JavaScript 发动机 V8 对于二次开发 ...
- 【Nodejs】【node.js 安装 和 配置Sublime Text的Node.js】
[一] [安装nodejs] 第一步:下载安装文件: https://nodejs.org/en/download/ 第二步:安装nodejs 下载完成之后,双击"node-v6.10.1- ...
- Node.js学习笔记(五) --- 使用Node.js搭建Web服务器
1. Node.js 创建的第一个应用 1.引入http模块 var http = require("http"); 2. 创建服务器接下来我们使用 http.createServ ...
- 【nodejs】使用Node.js实现REST Client调用REST API
最近在产品中开发基于REST的API接口,结合自己最近对Node.js的研究,想基于它开发一个REST Client做测试之用. 通过初步研究,Node.js开发HTTP Client还是挺方便的. ...
- Node.js 学习(四)Node.js 回调函数
Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都 ...
- Nodejs入门-基于Node.js的简单应用
服务端JavaScript 众所周知的,JavaScript是运行在浏览器的脚本语言,JavaScript通常作为客户端程序设计语言使用,以JavaScript写出的程序常在用户的浏览器上运行.直至N ...
- Node.js实战项目学习系列(1) 初识Node.js
前言 一直想好好学习node.js都是半途而废的状态,这次沉下心来,想好好的学习下node.js.打算写一个系列的文章大概10几篇文章,会一直以实际案例作为贯穿的学习. 什么是node Node.js ...
- node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法
1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...
随机推荐
- MySql模糊查询like通配符使用详细介绍
MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi.grep和sed的扩展正则表达式模式匹配的格式. 一.SQL模式 SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹 ...
- [CSS]列表属性(List)
CSS 列表属性(List) 属性 描述 CSS list-style 在一个声明中设置所有的列表属性. 1 list-style-image 将图象设置为列表项标记. 1 list-style- ...
- Django 基础
Django 的路由系统 在 django 的 URLconf 配置文件 urls.py 中根据一个 URL 对应 views 的一个函数来处理用户的请求. 1.基本的 urls 对应 urlpatt ...
- spoj 3885
简单的博弈题,用dp解: 每个人只能拿1,l,k个硬币: dp[i][j]表示第j个人拿是否能拿第i枚硬币: 代码: #include<cstdio> #define maxn 10000 ...
- 深入了解一下PYTHON中关于SOCKETSERVER的模块-D
在LINUX上以FORK的方式使用SIMPLEHTTPSERVER. 记得哟,THREADING能在WIN和LINUX上实现,但FORK,不支持WIN的. 除了SIMPLE之外,还有CGI,就不示例啦 ...
- 《Effective C++》条款14 总是让base class拥有virtual destructor
有时,一个类想跟踪它有多少个对象存在.一个简单的方法是创建一个静态类成员来统计对象的个数.这个成员被初始化为0,在构造函数里加1,析构函数里减1.(条款m26里说明了如何把这种方法封装起来以便很容易地 ...
- Java接口修饰符详解
接口就是提供一种统一的”协议”,而接口中的属性也属于“协议”中的成员.它们是公共的,静态的,最终的常量.相当于全局常量.抽象类是不“完全”的类,相当于是接口和具体类的一个中间层.即满足接口的抽象,也满 ...
- 【转】Android Fragment 基本介绍--不错
原文网址:http://www.cnblogs.com/mengdd/archive/2013/01/08/2851368.html Fragment Android是在Android 3.0 (AP ...
- 织梦CMS(dedecms)栏目属性及系统封面模板、列表模板、文章模板区别和路径设置解答
问题一:(织梦"栏目管理"的"常规选项"中3个栏目属性分析?) 织梦CMS的栏目属性分成三种, -->最终列表栏目 -->频道封面 -->外部 ...
- eclipse常见错误
1.The superclass “javax.servlet.http.httpservlet” is not found in the build path 原因:未添加server librar ...