欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

[Node.js]一.什么是Node.js,而又能做什么?

shiping1 的头像

一.什么是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:当然可以,而且还非常简单,甚至可以做TCPsocket开发,当然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

普通分类: