Xufun’s Node.js Primer

    看了個人前研日誌,從2012年04月開始接觸Node.js,半年快過去了,今天總結一下,把本身的經歷彙總,給須要學習的人提供一點參考。 html

    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. 」 node

    我在v0.6.15,和v0.8.8上嘗試了不少試驗,版本升級帶來不少不兼容的問題,可見其還在快速發展完善過程當中,今天看了網站,已是v0.8.9了。至於入門教程,之類的網上不少,我是這樣學習的,你也能夠參考學習。我總結一些本身的所遇,供見者參考,少走彎路。 git

http://www.nodebeginner.org/index-zh-cn.html github

http://www.ibm.com/developerworks/cn/opensource/os-nodejs/ mongodb

    Node.js簡單高效,作一個網絡服務,我曾經從Socket select、IOCP、gSoap、Apache(PHP)、和IIS(.Net)各級創建一個網絡服務,從Sokcet開始實現的難度就不提了,就Apache和IIS的安裝配置就須要至少半天吧。Node.js,一個程序搞定! 數據庫

    Node.js是事件驅動,異步非阻塞方式,適合作快速高效的任務計算。不過異步非阻塞的方式也考驗程序流程的設計,感興趣能夠深刻嘗試一下Node.js的文件讀取過程。 npm

    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定義的模塊系統,不一樣的功能組件被劃分紅不一樣的模塊,應用程序能夠根據本身的須要來選擇使用合適的模塊。 app

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,原來只是放在根目錄就完事了,如今知道了是瀏覽器發起的第二個動做。

    粗淺嘗試,總結一下,供見者參考了。

本文地址:http://blog.xufun.cn/?p=330

相關文章
相關標籤/搜索