zoukankan      html  css  js  c++  java
  • 学习NodeJS第一天:node.js引言

    Node.JS 是资深 C 程序猿 Ryan Dahl(http://four.livejournal.com/)的作品,根据 Google 著名的开源 JavaScript 引擎 V8 来进行二次开发的 Web I/O server(http://nodejs.org/)。V8 本身是很快的 JavaScript 引擎,处理 JS 执行执行的速度很高。相关測试表明,FireFox、Opera 和 IE 的 JS 引擎速度都不及 V8 来得快。并且,还能够说,仅仅要浏览器之间的 JS 引擎大战一日不减,NodeJs 就能够从中受益。有竞争才有进步:)。

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

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

    这样就对请求 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 之后,立马输入以下代码測试一下:

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

    Webserver的事件编程其意义
    我们知道而且十分清楚,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 server一直乃久经不衰的热点和话题,或许有非常多的解决方式,性能达到一定的指标也没有问题,只是问题是,因而,在保证并满足性能达标的前提下,却非常少见一个自然、适合编写业务逻辑的开发平台,以 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中文资源

  • 相关阅读:
    Single Number II
    Pascal's Triangle
    Remove Duplicates from Sorted Array
    Populating Next Right Pointers in Each Node
    Minimum Depth of Binary Tree
    Unique Paths
    Sort Colors
    Swap Nodes in Pairs
    Merge Two Sorted Lists
    Climbing Stairs
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4024657.html
Copyright © 2011-2022 走看看