因組裏項目須要,我和另一名同事要學習Node.js。以前接觸過Javascript,都是前臺處理html時用到,如今要用Javascript作後端,學習Node.js,用一段時間專心學習一門新技術,並且還有項目實戰鍛鍊,還不錯。html
一. Node.js架構node
1. Node.js跨平臺支持*nix與Windows得益於Libuv中間層,經過它去調用不一樣操做系統的底層操做。編程
2. Node.js底層由C++實現,所以能夠編寫C++擴展模塊,經封裝後由JS調用,這樣能夠解決須要提高性能時(例如頻繁的位運算,JavaScript的一個弱點是位運算,由JS來作性能低),就能夠編寫C++擴展模塊,與JS配合提高性能。後端
二. Node.js特色安全
1. 單線程服務器
優勢:無需像多線程編程在乎狀態的同步問題,所以無死鎖問題,也避免了線程上下文切換帶來的性能開銷網絡
2. 異步I/0(非阻塞I/0)多線程
優勢:讓單線程遠離阻塞,更好地利用CPU架構
3. 事件驅動異步
三. 初學網絡編程
Node.js標準庫提供了http模塊,其中封裝了一個高效的HTTP服務器和一個簡易的HTTP客戶端。http.server是一個基於事件的HTTP服務器,核心由Node.js下層C++部分實現,接口由Javascript封裝,兼顧高性能與簡易性。
舉個經典的小例子,
1 //http.js 2 var http = require('http'); 3 var url = require('url'); 4 var querystring = require('querystring'); 5 6 //for example, url: http://127.0.0.1:3000/p/a/t/h?query=string 7 8 var getReqInfo = function(req){ 9 //get req.url 10 console.log("req.url: " + req.url); 11 12 //get path 13 var path = (url.parse(req.url)).pathname; 14 console.log("path: " + path); 15 16 //get querystring 17 var query = url.parse(req.url).query; 18 console.log(querystring.parse(query)); 19 } 20 21 http.createServer(function(req, res){ 22 23 getReqInfo(req); 24 25 res.writeHead(200, {'Content-Type': 'text/plain'}); 26 res.end('Hello world!\n'); 27 }).listen(3000); 28 29 console.log('now we are listening 3000 port');
用戶經過輸入URL(http://127.0.0.1:3000/p/a/t/h?query=string)訪問時,就能夠獲取URL中的參數(這裏指reqest header的第一行信息),並做出響應。結果以下:
這裏建立的是HTTP服務器,若是建立Https服務器,相比http,須要多提供一個參數,包含私鑰和簽名證書,如server.key和server.crt。客戶端在發起安全鏈接前會去獲取服務器端的證書,並經過CA的證書驗證服務器端證書的真僞。
四. Node.js學習資料
1. 《Node.js入門指南》,推薦,適合入門
2. 《深刻簡出Node.js》,有深度,推薦
五. 其餘備忘
1. IDE
我用的是Vim,安裝插件(nodejscomplete和JsHint)後,能夠實現代碼提示及語法錯誤檢查。
2014.6.4上午