Node.js 学习笔记(一)
什么是Node.js
"Node.js 是服务器端的JavaScript 运行环境,它具有无阻塞(non-blocking)和事件驱动(event-driven)等的特色,Node.js 采用V8 引擎,同样,Node.js 实现了类似Apache 和nginx 的web 服务,让你可以通过它来搭建基于JavaScript 的Web App。
图1-1:node.js主页http://nodejs.org/
下面我们解释下什么叫阻塞
1 //根据ID,在数据库中Persons表中查出Name 3 var name = db.query("select name from persons where id=1"); 5 //进程等待数据查询完毕,然后使用查询结果. 7 output("name")
上面的这段代码查询过程中进程往往是在等待查询的结束,然后将结果返回。这就造成了阻塞,这对于高迸发高密集的网络。一方面进程很长时间处于等待,一方面为了应付新的请求不断的增加新的进程,严重了服务器的性能也容易被慢链攻击(服务端故意不接收数据加长进程等待时间)
怎么解决阻塞
建立一种事件机制,当发送查询后将进程交出,当数据返回后触发事件后立即执行output;
为什么js适合解决阻塞
1.Js是函数式编程函数可以当参数直接调用,js还支持匿名函数。
1 db.query("select name from persons where id=1",function(name){ 2 output(name); 3 });
2. js独特的生命周期 闭包
1 //异步写法: 2 function main(){ 3 var id = "1"; 4 db.query("select name from persons where id=" + id,function(name){ 5 output("person id:" + id + ", name:" + name);//n秒后数据返回后执行回调 6 }); 7 } 8 main();
安装node.js
搭建第一个web
新建个hello的js
1 var http = require('http'); 2 http.createServer(function (req, res) { 3 res.writeHead(200, {'Content-Type': 'text/plain'}); 4 res.end('Hello World\n'); 5 }).listen(1337, '127.0.0.1'); 6 console.log('Server running at http://127.0.0.1:1337/');
在命令中输入
然后我们访问http://127.0.0.1:1337/
第一个web就搭建好了:)