看了我的前研日志,从2012年04月开始接触Node.js,半年快过去了,今天总结一下,把自己的经历汇总,给需要学习的人提供一点参考。
Node.js是什么?不是Web服务之类,是叫“平台”,官网说明:“Node.js is a platform built on Chrome’s JavaScript runtime for easily building fast, scalable network application. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices. ”
我在v0.6.15,和v0.8.8上尝试了很多试验,版本升级带来很多不兼容的问题,可见其还在快速发展完善过程中,今天看了网站,已经是v0.8.9了。至于入门教程,之类的网上很多,我是这样学习的,你也可以参考学习。我总结一些自己的所遇,供见者参考,少走弯路。
http://www.nodebeginner.org/index-zh-cn.html
http://www.ibm.com/developerworks/cn/opensource/os-nodejs/
Node.js简单高效,做一个网络服务,我曾经从Socket select、IOCP、gSoap、Apache(PHP)、和IIS(.Net)各级建立一个网络服务,从Sokcet开始实现的难度就不提了,就Apache和IIS的安装配置就需要至少半天吧。Node.js,一个程序搞定!
Node.js是事件驱动,异步非阻塞方式,适合做快速高效的任务计算。不过异步非阻塞的方式也考验程序流程的设计,感兴趣可以深入尝试一下Node.js的文件读取过程。
Node.js一个非常值得学习的地方是,学习研究可以仔细了解HTTP的工作过程。如果都是做J2EE和.Net的Web应用,知道Request/Response就可以了,Node.js可以跟踪Request的数据接收过程,了解 on”data”和on”end”这样实际网络数据传输中可能发生的动作,对Socket(select/IOCP)实现都做了封装,但是又可以让使用者看到过程。
Node.js属于当下热门的平台,多方大牛公司开始提供支持,比如微软。
Node.js组织和很多机构已经提供了多种应用的支持模块,MongoDB,WebSocket,MySQL等都有,也有了on Rails的Web开发框架。Node.js采用了Common JS定义的模块系统,不同的功能组件被划分成不同的模块,应用程序可以根据自己的需要来选择使用合适的模块。
MongoDB:
MongoDB在Node.js的安装:C:\Program Files\nodejs>npm install mongodb-wrapper
作为对比,MongoDB在PHP的使用:
$m = new Mongo();
$db = $m->TestDB;
$c = $db->TestTB;
$c->insert(array("key"=>$sn, "val"=>"$sn"."-".rand()."-".rand().";."));
echo "Now count=".$c->count()."<br>";
$m->close();
MongoDB在Node.js使用:
var http = require("http"),
mongo = require("mongodb"),
http.createServer(function(req, res) {
//创建到TestDB数据库的链接。相当于use TestDB
db = new mongo.Db("TestDB", new mongo.Server('localhost', 27017, {}), {});
var listener = function(TestTB) {
var html = [], len = TestTB.length;
if(len > 0) {
for(var i = 0; i < len; i++) {
html.push('<tr><td>' + TestTB[i].key + '</td><td>' + TestTB[i].val + '</td></tr>');
}
}
}
db.open(function() {
// 打开名为TestTB的表
db.collection("TestTB", function(err, collection) {
// select * from TestTB 相当于db.TestTB.find()
collection.find(function(err, cursor) {
cursor.toArray(function(err, items) {
products_emitter.emit('TestTB', items);
});
});
});
});
}).listen(8000);
console.log("Started(Modi byXufun20120503)");
网络访问,IP 0.0.0.0
默认的例子http.createServer(. . .).listen(8080),只有端口,监听的IP地址是127.0.0.1,即只能本地访问。如果需要网络访问需要http.createServer(. . .).listen(8080,’0.0.0.0’)。
WebSocket
关于WebSocket的Node.js实现,网络上例子很多,不过很多都有版本问题。我调试成功的是使用https://github.com/einaros/ws,在Node.js v0.8.8调试通过。
Node.js不是基于Web网页的,所以其开发不同于PHP的网站实现。因为Web开发的普及,JavaScript几乎没有门槛,但是Node.js的驾驭和大规模使用还需要研究测试再决策使用。特别是用Node.js 代替PHP,更需要慎重考虑。不过作为一项新的技术平台,学习和尝试具有非常的价值,特别是对于Web开发人员来说,通过Node.js学习HTTP的工作过程和浏览器之间的交互步骤,当有人从浏览器登录你的网站时,自动会来请求favicon.ico,原来只是放在根目录就完事了,现在知道了是浏览器发起的第二个动作。
粗浅尝试,总结一下,供见者参考了。