《深刻淺出Node.js》學習筆記(一)

看了樸靈前輩的node.js系列文章,很開闊視野,雖然能力有限仍是有不少不懂,可是仍是但願能寫下筆記,初步對node.js有點了解。javascript

1、概念

  • Node.js不是JS應用、而是JS運行平臺
  • Node.js採用C++語言編寫而成,是一個Javascript的運行環境。爲何採用C++語言呢?據Node.js創始人最初但願Ruby,可是Ruby虛擬機的性能不能知足他的要求,後來他嘗試採用V8引擎,因此選擇了C++語言。Node.js採用了Google Chrome瀏覽器的V8引擎,性能很好,同時還提供了不少系統級的API,如文件操做、網絡編程等。瀏覽器端的Javascript代碼在運行時會受到各類安全性的限制,對客戶系統的操做有限。相比之下,Node.js則是一個全面的後臺運行時,爲Javascript提供了其餘語言可以實現的許多功能。
  • Node.js採用事件驅動、異步編程,爲網絡服務而設計

2、應用

編寫一個簡單的http服務器

var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(80, "127.0.0.1");

說明:在本地監聽80端口,對於任意的http請求,服務器都返回一個頭部狀態碼爲200、Content-Type'值爲text/plain'的」Hello World「文字響應。
Node.js的網絡編程比較便利,提供的模塊(在這裏是http)開放了容易上手的API接口,短短几行代碼就能夠構建服務器。
體現了事件驅動、異步編程,在createServer函數的參數中指定了一個回調函數(採用Javascript的匿名函數實現),當有http請求發送過來時,Node.js就會調用該回調函數來處理請求並響應。固然,這個例子相對簡單,沒有太多的事件註冊,在之後的文章中讀者會看到更多的實際例子。java


另外一個實例:
Javascript的匿名函數和閉包特性很是適合事件驅動、異步編程,從helloworld例子中咱們能夠看到回調函數採用了匿名函數的形式來實現,很方便。閉包的做用則更大,看下面的代碼示例:node

var hostRequest = http.request(requestOptions,function(response) {
    var responseHTML ='';
    response.on('data', function (chunk) {
        responseHTML = responseHTML + chunk;
    });
    response.on('end',function(){
        console.log(responseHTML);
        // do something useful
   });
});

3、Node.js特色

單進程、單線程模式運行(很吃驚,對吧?這和Javascript的運行方式一致),事件驅動機制是Node.js經過內部單線程高效率地維護事件循環隊列來實現的,沒有多線程的資源佔用和上下文切換,這意味着面對大規模的http請求,Node.js憑藉事件驅動搞定一切編程

相關文章
相關標籤/搜索