[转]NodeJS初探

来源:互联网 发布:淘宝来图印花定制内裤 编辑:程序博客网 时间:2024/06/01 03:57


NodeJS初探之一——神秘的服务器端JS


什么是NodeJS?

       第一次看到这个名字,是我在报名淘宝的知识分享时看到的,我很兴奋也很好奇这样的一个JS框架。而你看到这个名字的第一个反应会是什么,是否和我一样的简单的以为它就是一个JS框架?反正我是这么认为了。如果你也是,哈哈,看来也是和我一样单纯。

       在去听分享前,我特意google了相关资料来了解,不禁使我吓一大跳,或许是我刚出校园,视野太窄,远没有想过JS脚本从可以从客户端的浏览器转移到了 服务器上。当然,我不是很明白,这样做达到了一个什么样的好处。


简单地说,NodeJS是一个使用了Google高性能V8 引擎 的服务器端JavaScript实现。它提供了一个(几乎)完全非阻塞I/O栈,与JavaScript提供的闭包和匿名函数相结合,使之成为编写高吞吐 量网络服务程序的优秀平台。
特点:
* 单线程事件模型,简单高效
* 基于活跃的高性能V8引擎
* 社区活跃,组件丰富

 

或许,这一大炮又让前端开发人员又掀起一阵高浪。 在听完淘宝之后的分享,以及之后在网上相关的准备的查询,我才知识,NodeJS正在稍无声息的壮大起了了,一群活跃的开发人员,正在喂养这个出世不久的 孩子,这或许将是继日本海啸的后浪。

 

 

不信?好吧,看看下面的这些:


http://nodejs.org/ 官网
https://github.com/joyent/node/wiki wiki
http://cnodejs.org/ 淘宝的工程师志愿发起的原创社区
http://www.grati.org/?cat=35 一个国内灰常活跃的社区
http://wiki.grati.org/index.php?title=NodeJS%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3 官方文档翻译wiki
引自:cnodejs.org
 官方网站: http://nodejs.org/
 英文文档: http://nodejs.org/docs/v0.3.5/api/all.html
 node包管理器: http://npmjs.org/
 官方介绍: http://nodejs.org/jsconf2010.pdf
 Node的模块大全,必阅读: https://github.com/ry/node/wiki/modules
 一个Node入门网站: http://howtonode.org
 一个不错的Node博客: http://blog.nodejitsu.com/
 包含了不少node信息的前端blog: http://dailyjs.com/
 一个48小时NodeJS的竞赛网站: http://nodeknockout.com/

 

 

NodeJS 安装(安装环境ubuntu10.04):


   1、先从官网上(http://nodejs.org/)下载源码,这边我所下的是 node-v0.4.3.tar.gz 版本的包。


Js代码  收藏代码
  1. $ tar   -zxvf  node-v0.4.2.tar.gz  
  2. $ cd   node-v0.4.2  
   

    2、接下来进行安装

Js代码  收藏代码
  1. $ ./configure  
  2. $ make  
  3. $ sudo make install  
   

    3、安装npm(NodeJS Package Manager NodeJS的包管理器)

     相关介绍文章:http://howtonode.org/introduction-to-npm

    

  安装命令为:          

  (注意出错时请检查是不是以root用户进行安装)

Js代码  收藏代码
  1. curl http://npmjs.org/install.sh | sh  
    


    4、 配置环境变量,在这里,我所安装的路径为~$ cd /var/iapps/nodejs/

Js代码  收藏代码
  1. sudo export PATH=$PATH:/var/iapps/nodejs/bin  

 

 查看是否安装成功:

Js代码  收藏代码
  1. sammor@sammor-desktop:~$ cd /  
  2. sammor@sammor-desktop:/$ node --version  
  3. v0.4.2  

 

     如此便成功安装了NodeJS

 

NodeJS ——Hello,World!

 

  准备脚本:

Java代码  收藏代码
  1. //helloworld.js  
  2. var sys = require("sys"),    
  3.      http = require("http");    
  4.      http.createServer(function(req, res) {    
  5.      setTimeout(function () {  
  6.              res.writeHeader(200, {"Content-Type""text/plain"});  
  7.              res.write("Hello,World!");  
  8.              res.finish();  
  9.          }, 2000);  
  10.      }).listen(8000);  
  11.  sys.puts("Server running at http://localhost:8000/");    
     

  执行脚本:

Js代码  收藏代码
  1. root@sammor-desktop:/var/iapps/nodejs/work# node helloworld.js   
  2. Server running at http://localhost:8000/  
   

  这时浏览器上访问 http://localhost:8000/

    就可以在页面上看到期待的效果:

Js代码  收藏代码
  1. Hello,World!  
   

   这就是NodeJS的Hello,World! 神奇吧。

 

问题 :

    在这里,我只想起个引子,让大家更多的知道这个东西。因为我觉得,这或许对于前端来说是一个很大的惊喜,但对于不善于前端的我来说了开始疑惑了,也许很多人也一样在想着,这样的东西,适用于什么样的场景下?相对于传统的服务端方式来说,它又有什么优势呢?后面有一篇关于我问分享的讲师的一些问题,大家可以看看 NodeJS初探之三——新星的力量 。



NodeJS初探之二——与Mysql的交互


引言: 继前面的NodeJS的Hello,World!我们还可以看到其他强大之处,NodeJS现在社区的火热,以及大批工程师对它的支持之下,现在已经陆续的引出了大量的module出来了。


内容: 下面这个所演示的是NodeJS与Mysql 的交互。

这时需要为NodeJS加入Mysql 的Module了,这时前一章说到的npm(Node package manager)启到作用了。


    把Mysql Module装到NodeJS中

Js代码  收藏代码
  1. $npm install Mysql   

 

  JS脚本 mysqlTest.js

Js代码  收藏代码
  1. // mysqlTest.js  
  2. //加载mysql Module  
  3. var Client = require('mysql').Client,  
  4.     client = new Client(),  
  5.     
  6.   //要创建的数据库名  
  7.     TEST_DATABASE = 'nodejs_mysql_test',  
  8.     //要创建的表名  
  9.     TEST_TABLE = 'test';  
  10.   
  11. //用户名  
  12. client.user = 'root';  
  13. //密码  
  14. client.password = 'root';  
  15. //创建连接  
  16. client.connect();  
  17.   
  18. client.query('CREATE DATABASE '+TEST_DATABASE, function(err) {  
  19.   if (err && err.number != Client.ERROR_DB_CREATE_EXISTS) {  
  20.     throw err;  
  21.   }  
  22. });  
  23.   
  24. // If no callback is provided, any errors will be emitted as `'error'`  
  25. // events by the client  
  26. client.query('USE '+TEST_DATABASE);  
  27. client.query(  
  28.   'CREATE TABLE '+TEST_TABLE+  
  29.   '(id INT(11) AUTO_INCREMENT, '+  
  30.   'title VARCHAR(255), '+  
  31.   'text TEXT, '+  
  32.   'created DATETIME, '+  
  33.   'PRIMARY KEY (id))'  
  34. );  
  35.   
  36. client.query(  
  37.   'INSERT INTO '+TEST_TABLE+' '+  
  38.   'SET title = ?, text = ?, created = ?',  
  39.   ['super cool''this is a nice text''2010-08-16 10:00:23']  
  40. );  
  41.   
  42. var query = client.query(  
  43.   'INSERT INTO '+TEST_TABLE+' '+  
  44.   'SET title = ?, text = ?, created = ?',  
  45.   ['another entry''because 2 entries make a better test''2010-08-16 12:42:15']  
  46. );  
  47.   
  48. client.query(  
  49.   'SELECT * FROM '+TEST_TABLE,  
  50.   function selectCb(err, results, fields) {  
  51.     if (err) {  
  52.       throw err;  
  53.     }  
  54.   
  55.     console.log(results);  
  56.     console.log(fields);  
  57.     client.end();  
  58.   }  
  59. );  

 

  执行脚本

Js代码  收藏代码
  1. root@sammor-desktop:/var/iapps/nodejs/work# node mysqlTest.js   

 

    这时,Mysql数据库结果 显示:

    





NodeJS初探之三——新星的力量


引言:

       就如我前面提到的,对于NodeJS这一服务端JS所思考的一些问题,”这样的东西,适用于什么样的场景下?相对于传统的服务端方式来说,它又有什么优势呢? 

 

内容:

      今天特意请教了一下,上次在淘宝分享的那个讲师,也提了一些相关的问题,希望也能给大家解决一些相同的疑惑。

 

问题一: 
服务端JS的实现,和我们传统的服务端实现相比,优势在哪里呢?

答:从几个方面看
1、和传统的服务端脚本语言, 原生的非阻塞io,能够很大程度上提高并发负载能力
2、对于java,c等直接开发的非阻塞服务,在开发效率和成本上要更胜出.
3、从语言特性上讲,js语言本身对事件机制由很好的支持,

问题二: 
对于第二点中的开发效率和成本,具体体现在哪呢?我不是很明白,而且用起来也很别扭。

答:
1、java的nio实现代码量要比node多出很多,c的就要更多,而且debug起来比较复杂。
2、相对ruby等语言,node在执行效率上又胜出不少,而且node无协程个人觉得是比较好的选择。
3、而对于这种JS方式,刚开始使用确实要适应一段时间

问题三: 
对于NodeJS,怎么样进行调试呢?

答:
1、进调试模式以后help就能看到了,具体的就是v8的debug命令.
进入调试模式方式为:$node debug node.js
 


来源:

http://sammor.iteye.com/category/148387