《深刻浅出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凭借事件驱动搞定一切编程

相关文章
相关标签/搜索