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 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 server,侦听来自client的请求,匿名參数中的 req 和 res 分别代表请求对象和响应对象。NodeJS 把逻辑语句写在一个函数中,说明创建server 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 和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中文资源

转载于:https://www.cnblogs.com/hrhguanli/p/4002447.html

学习NodeJS第一天:node.js引言相关推荐

  1. CSDN学霸课表——学习NodeJS第一天

    <学习NodeJS第一天:node.js引言> Node.js 是资深 C 程序员 Ryan Dahl(http://four.livejournal.com/)的作品,依据 Google ...

  2. 带你入门nodejs第一天——node基础语法及使用

    带你入门nodejs第一天--node基础语法及使用 带你入门nodejs第二天--http 模块化 npm yarm 带你入门nodejs第三天-express路由 带你学习nodejs第四天--身 ...

  3. 狼叔直播 Reaction《学习指北:Node.js 2022 全解析》

    大家好,我是若川.持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan02 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...

  4. nodejs学习巩固笔记-nodejs基础,Node.js 高级编程(核心模块、模块加载机制)

    目录 Nodejs 基础 大前端开发过程中的必备技能 nodejs 的架构 为什么是 Nodejs Nodejs 异步 IO Nodejs 事件驱动架构 全局对象 全局变量之 process 核心模块 ...

  5. 【第一节 Node.js简介】

    1.Node.js是什么? Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快速的.可扩展的网络应 ...

  6. java nodejs aes_Java与Node.js利用AES加密解密出相同结果的方法示例

    前言 工作中遇到nodejs端通过aes加密,安卓客户端Java解密,同样nodejs也需要解密安卓客户端加密过来的内容,发现两个加密结果不一样,查询资料发现java端需要对密钥再MD5加密一遍,以下 ...

  7. 【技术学习】一次Node.js站点渗透

    前言 遇到一个站,后端是Node.js写的,对于这种类型的站点,一般比较难getshell,但也实现了最终的目标,拿到后台权限 信息搜集 先进行常规的信息搜集,子域名扫描.端口扫描.目录扫描等 这个站 ...

  8. nodeJS 中文API node.js 中文文档

    Node.js Manual & Documentation Table Of Contents Synopsis 概要 Global Objects 全局对象 global process ...

  9. 前端学习(1319):node.js异步编程

    test,js function getMsg(callback) {setTimeout(function() {callback({msg: 'hello node js'})}, 2000) } ...

最新文章

  1. 2.7 RMSprop-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  2. 客户端界面实现及登录功能实现
  3. open-capacity-platform STS项目导入
  4. Javascript实例:Select的OnChange()事件
  5. 查询数据库 收集 (如某个字段不是中文)
  6. python 随机获取数组元素_Python创建二维数组的正确姿势
  7. java中常见的几种内部类,你会几个?(未完)
  8. MVC里面写html获取不到input,asp.net-mvc – ASP.Net [HiddenInput]数据属性在Razor中用Html.EditorForModel渲染时不起作用?...
  9. Numpy Math functions
  10. hadoop php mysql_PHP+Hadoop+Hive+Thrift+Mysql实现数据统计分析
  11. Peter Norvig:学习在于挑战和重复
  12. uci数据集汇总及翻译
  13. 开源GIS与空间数据库实战教程
  14. win7设置自动开机时间_使计算机自动开机
  15. ps添加的阴影怎么去除_PS怎么把阴影去掉
  16. iOS-Swift3富文本(UILable文本图文混排)
  17. Android studio中的警告Hardcoded text
  18. 升级safari 12版本,easyconnectplugin插件等不能使用解决办法
  19. c语言兑换100人民币,100 元人民币有几多种换零方式
  20. 联想Y410pY510p外置显卡Vbios,Y400Y500外置显卡VBIOS, ULTRABAY白名单,卡白名单。

热门文章

  1. 《Linux内核设计与实现》读书笔记(六)- 内核数据结构
  2. kali 安装搜狗输入法
  3. std::future和std::promise和std::packaged_task
  4. linux下nano修改并保存
  5. [Jarvis OJ - PWN]——[XMAN]level1
  6. 关于ViewTreeObserver的理解
  7. 同一Word文档不同尺寸(纸张)页面的混排方法
  8. [软件推荐]使用OneNote来构建你自己的知识库(OFFICE2010)
  9. Linux命令-磁盘管理(二)
  10. Timus Online Judge:ural:1006. Square Frames