设为首页 收藏本站
查看: 1435|回复: 0

[经验分享] 【转】学习NodeJS第一天:node.js引言

[复制链接]

尚未签到

发表于 2017-2-22 07:11:01 | 显示全部楼层 |阅读模式
    Node.JS是资深C程序员Ryan
Dahl(http://four.livejournal.com/)的作品,依据Google著名的开源JavaScript引擎V8来进行二次开发
的Web
I/O服务器(http://nodejs.org/)。V8本身是非常快的JavaScript引擎,处理JS执行运行的速度非常高。相关测试表
明,FireFox、Opera和IE的JS引擎速度都不及V8来得快。而且,还可以说,只要浏览器之间的JS引擎大战一日不减,NodeJs就可以从中
受益。有竞争才有进步:)。




 

NodeJS基本用法也是十分简单明了的,我们看看一下这一句,就是最简单的代码:


var  sys  = require('sys')  ,http = require('http');  
http.createServer(function (req, res) {  
res.writeHead(200, {'Content-Type': 'text/plain'});  
res.write('Hello World');  
res.close();  
}).listen(8006);  
sys.puts('Server running at http://127.0.0.1:8006/');

   以上语句var http = require('http');http.createServer(function (req, res)
{…});就是创建一个HTTP服务器,侦听来自客户端的请求,匿名参数中的req和res分别代表请求对象和响应对象。NodeJS把逻辑语句写在一个
函数中,说明创建服务器createServer()连这一步骤都是异步的!而且除此之外,req也有相关的异步操作:


    http.createServer(function (req, res) {  
req.addListener("end",function(){  
sys.puts("request end");  
});  
res.writeHead(200, {'Content-Type': 'text/plain'});  
res.write('Hello World');  
res.close();  
}).listen(8006);  

   这样就对请求req登记了end的事件。在请求结束时通过sys.puts方法加入"request end"。在使用事件的过程中,实质也算是一个异步过程,非同步的。


从宏观层面看以上的演示,上面仅仅是一个比较底层的操作,都是低层次的控制,不足以提供更多High
Level逻辑。要增强NodeJS这个平台功能,我们可以使用其他围绕NodeJS而开发模块,甚至是一个初具规模的“框架”,——其中一个就是
Express(http://github.com/visionmedia/express)。安装Express的前提是安装另一个依赖
包:Kiwi(http://github.com/visionmedia/kiwi),然后键入kiwi -v install
express才可以正式安装Express。安装好Express之后,立刻输入下面代码测试一下:


    var sys = require("sys"),  
kiwi = require("kiwi"),  
express = kiwi.require('express');  
get('/', function(){  
this.redirect('/hello/world')  
});  
get('/hello/world', function(){  
return 'Hello World'  
});  
get('/goodbye/world', function(){  
return 'Goodbye World'  
});  
run();  

   Express运行的URL和端口是http://localhost:3000,默认请求的规则都会被转移到/hello/world目录,返回
'Hello World'的字符串。访问/goodbye/world目录就返回'Goodbye
World'。Express之所以被称为一个“框架”,应该还有其他的功能在内,例如请求路由、渲染视图的其他高级功能。

Web服务器的事件编程其意义




我们知道并且十分清楚,JavaScript是单线程的(就当前流行的js
v1.5而言),怎么避免I/O通道上的阻塞(block)呢?——基于事件驱动(Event-based)的编程或者或者是一种可行之道,为不少后台程
序解决线程/阻塞之用。自从Viusal
Basic流行起,基于事件驱动的编程模型在GUI之上早已为我们所熟悉,存在很长的一段时间了。若说上早期的开发,那时我们经常的一个做法,就是在
main()方法写一个无限循环(while(true)
loop),从而获得控制任何时刻程序的能力,亦算是一种朴素的“事件”模型。我们清楚,JavaScript天然是Function First
Level的,对一个函数还可以送入一个函数的参数(即传入一个闭包closure),换言之,JS天生与事件驱动的编程是不谋而合,相得益彰的。鉴于
此,Node.js的事件编程理念的确是一个亮点。

  另外一点,高并发的Web服务器一直乃久经不衰的热点和话题,也许有很多的解决方案,性能达到一定的指标也没有问题,不过问题是,因而,在保证并满
足性能达标的前提下,却很少见一个自然、适合编写业务逻辑的开发平台,以JavaScript为开发语言的NodeJS正好符合这一需求,一种符合大多数
人需求的DSL(估计js玩家数量可观得可以……)。例如,一个简单的计数器设计,我登录某个url,就触发一个计数器的事件,十分自然。当然,更重要的
是,还是JS的语言特征,即Function、闭包、相似的C语法、精炼与简洁的风格等等,尤其Function,简直为事件模型而生,轻松吻合
node.js异步机制的理念,
才是真正吸引玩家去乐此不疲的原因。

  

尽管NodeJS现在还非常的年轻,也没有久经世故,不过值得可喜的是,现在涌现了一大批围绕NodeJS的插件、增强包,有的是链接数据库,有的是用于
logging、Template模板、单元测试,有的还是服务于长链接下(long
polling)轮询的……等等。我们可以参见NodeJS具体的模块列表,在http://wiki.github.com/ry/node
/modules。

   

  分享一个Node.js的专题网站,适合初学者:


  http://howtonode.org/


  nodejs与websocket的资源:


  http://blog.new-bamboo.co.uk/2009/12/7/real-time-online-activity-monitor-example-with-node-js-and-websocket


  http://blog.johngoulah.com/2010/03/nodejs-websockets-and-the-twitter-gardenhose/
http://blog.andregoncalves.com/2009/12/29/Nodejs-twitter-streaming-with-
html5-websockets.html


  写node.js的插件(C++)

  https://www.cloudkick.com/blog/2010/aug/23/writing-nodejs-native-extensions/


  在win平台上跑node.js,借助虚拟机:


  http://www.lazycoder.com/weblog/2010/03/18/getting-started-with-node-js-on-windows/


  在win直接运行的可执行文件(已编译):

  http://www.grati.org/?page_id=213
不错的node.js中文资源

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-345372-1-1.html 上篇帖子: Node.js 笔记(一) nodejs、npm、express安装 下篇帖子: 一起读nodejs(七)----事件(Events)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表