一.什么是Node.js,而又能做什么?
什么是Node.js
Q:Node.js?
A:这货不是Javascript。但它的的确确是Javascript!
Q:一个新的Javascript框架?
A:不是框架,哦,如果不严格地说,好像也算是框架,但是在浏览器中它不并怎么受支持。
Q:那有个屁用?
A:那就错了,它的作用会让你和你的小伙伴惊呆的。
Q:哦?我不相信!
A:额,如果有人告诉你,这货是做服务器端开发的,就像Java,PHP,.NET,GO,Python和Ruby等等做服务器端开发一样,你会相信吗?
Q:是吗?你这是在侮辱我的智商!
A:别着急,首先要申明,当初网景这个公司开发LiveScript的时候,本来就在同步制作服务端的开发,只是因为那个时代已经有很多有名的后台语言诞生,从而放弃这个梦想,所以你现在只看到浏览器中的Javascript,而且它被人长久误会为玩具。哦,对了,JavaScript和LiveScript是一个东西。
Q:好吧,这好像有点意思,那么它能做什么?
A:不要着急,这么伟大的一个创举,你为什么不多体会一下呢,其实一直有人在做这样的事情,只不过没有被得到广泛应用,或者只是自己用来玩玩,而不像V8团队这样聪明。
Q:V8?
A:没错,V8,这是一个在丹麦的Google团队,专门开发Javascript引擎,或许你已经无时无刻的都在使用它,也许你用过Chrome浏览器,或者基于Chromium的浏览器,那么你可以体会到页面的加载速度如此之快,这些一部分得利于V8引擎。
Q:那你的意思是,V8引擎可以将Javascript用于服务器功能开发?
A:正如你所说,谷歌开源了这个引擎,不仅仅开源这样简单,在Javascript的发展到路上具有划时代的意义。在前端,jQuery的出现加速了页面性能的优化,提高了Javascript的脚本功能,从而使得更多的前端框架出现,而现在Javascript的服务端功能得以东山再起,使得Javascript不在是单兵作战。
又能做什么
Q:我已经知道Javascript的服务端功能了,那么这个项目就叫做Node.js?
A:是的。
Q:那他能做什么呢?
A:服务端想要做到的事情基本都能做到。
Q:它由什么编写而成的呢?
A:C++
Q:那么它对底层的支持如何?
A:嗯,这样给你说吧,Node.js的实质就是用Javascript的代码规范通过C++进行了实现和封装,现在Node.js正在快速发展,对底层的支持也在逐步扩展,其中很多原生的Node都是使用底层的方式进行运作的。
Q:那这么说,我是否可以开发HTTP或者HTTPS协议这样的服务呢?
A:当然可以,而且还非常简单,甚至可以做TCP中socket开发,当然UDP一样支持。
Q:如果这样,我想我会考虑学习这个语言,可是,它有什么优点和缺点,现在的服务端语言这么多,我为什么要使用它呢?
A:当然,你没有必要必须要使用它,或许他也不是一门必修的语言课程,但是他的魅力足以让你学习。如果说优点,那么就是它是单线程多核多进程的语言,并且在他眼里所有的都是事件,而缺点也是因为如此,它无法满足实时密集型请求处理,而事件模型是很多人无法理解的。
Q:单线程?我的天,那效率怎么能提高呢?
A:不,其实多线程的语言处理是以消耗内存为代价,对于CPU的使用率一直不是很好,V8团队坚信,单线程已经够用了,使用非阻塞式IO和请求大大提高CPU的使用率,如果使CPU达到100%利用,那最好不过了,并且这对内存的释放也是有好处的。但也是因为如此对于密集方式请求,可能会出现阻塞,但好在当前密集方式请求并不是很多。
Q:好吧,那么什么是事件模型,我不太明白。
A:事件模型,从概念上来说就是通过一些列事件的绑定和触发进行交互的反馈,如果你使用过一些语言的监听器,或者理解什么是监听者模式,你会更好的理解这些,但是这里我不想太多讲解这些,你可以简单的理解为,所有的处理都像是在发命令,而对这个命令有兴趣的人会有反应,从而做一些事情。
Q:哦,那如果这样说,Node不是顺序执行了?
A:是的,这正是事件模型的核心,它不考虑顺序,而是以实际的事件响应顺序为主,所以这也给一些想学习这个语言的人带来了一些障碍,或许无法很好的理解这一点,但是我想应该先去学习一下什么是监听者模式就够了。
忽视了什么
Q:很好,我现在知道一些大概了,那我们是不是忽略了什么?
A:你说的很对,我们忽略了很多,但是犹如之前的对话,其中的缺点也就是我们所忽略的,Node不是万能的,比如他无法实现客户端界面的开发,至少目前是这样,对数据库的链接有些官方没有发行和开发,你或许可以在社区中看到有类似mysql的处理库,但这不意味者这是官方发行版本,所以很多人不愿意通过Node与数据库进行链接,当然现在Node对NoSQL类型数据库链接支持的不错。
Q:社区?那么这个社区活跃吗?
A:非常活跃,也正式因为如此,Node的发展速度非常惊人,比如你可以自己构建一个LIB,通过npm进行发布的升级,就是这么简单。
Q:那他在什么系统下开发?
A:除了传统的linux和unix外,现在也支持windows,当然windows下毕竟不是主流,我想你不也不会考虑在windows下进行开发。
Q:是的。不过能否给我一个简单的例子,让我体会一下呢?
A:没有问题。
一个简单的案例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var http = require( 'http' );
var util = require( 'util' );
var querystring = require( 'querystring' );
http.createServer( function (request,response){
var post = '' ;
request.on( 'data' , function (chunk){
post += chunk;
console.log(chunk);
});
request.on( 'end' , function (){
post = querystring.parse(post);
response.end(util.inspect(post));
});
}).listen(8080);
|
本文出自 “博远至静” 博客,请务必保留此出处http://sunspot.blog.51cto.com/372554/1263748
来自 http://sunspot.blog.51cto.com/372554/1263748