【Node.js】初識Node.js

  因組裏項目須要,我和另一名同事要學習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.keyserver.crt。客戶端在發起安全鏈接前會去獲取服務器端的證書,並經過CA的證書驗證服務器端證書的真僞。

 

四. Node.js學習資料

  1. 《Node.js入門指南》,推薦,適合入門

  2. 《深刻簡出Node.js》,有深度,推薦

 

五. 其餘備忘

  1. IDE

    我用的是Vim,安裝插件(nodejscomplete和JsHint)後,能夠實現代碼提示及語法錯誤檢查。

 

                                                              2014.6.4上午

相關文章
相關標籤/搜索