nodejs的安装使用及示例.doc

上传人:小飞机 文档编号:4197120 上传时间:2023-04-09 格式:DOC 页数:22 大小:340KB
返回 下载 相关 举报
nodejs的安装使用及示例.doc_第1页
第1页 / 共22页
nodejs的安装使用及示例.doc_第2页
第2页 / 共22页
nodejs的安装使用及示例.doc_第3页
第3页 / 共22页
nodejs的安装使用及示例.doc_第4页
第4页 / 共22页
nodejs的安装使用及示例.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《nodejs的安装使用及示例.doc》由会员分享,可在线阅读,更多相关《nodejs的安装使用及示例.doc(22页珍藏版)》请在三一办公上搜索。

1、成都信息工程学院Node.js的安装使用及示例周星2012/7/5本文档分为介绍篇和使用篇,介绍篇关于node.js的介绍、应用及前景等;使用篇包括node.js安装和命令、架起一个http服务、完成一个”hello,world”、搭建一个只支持静态网页的web服务器、使node.js和socket.io实现websocket, 搭建小型聊天室、node.js和jquery的结合,通过本文档初学者可以很快了解node.js及其使用方法,当然本文档只是一个简要概括,更多的功能需要您深入去探究。有几个新概念需要您了解:V8引擎、Rest、服务器javascript。目录介绍篇:2什么是node.j

2、s2Node.js的适用场景2Node 旨在解决什么问题2ESTful API3Twitter 队列3电子游戏统计数据3映像文件服务器3下面回答一些对于node.js和旧知识的一些问题41服务端JS的实现,和我们传统的服务端实现相比,优势在哪里呢?42 node.js的开发效率和成本,具体体现在哪呢?4使用篇:41 Node.js 的安装和控制台命令42架一个HTTP服务6一、批量执行代码6二、前端呢?还是后端?这是个问题。6三、模块模块7四、HTTP 服务之 Hello World73完成HelloWorld94搭建一个静态的web服务器11一读写文件11二、分析请求路径125Websock

3、et的实现15一、WebSocket 是什么15二、与传统的http相比,它的优点是什么15三、WebSocket 能干什么15四、WebSocket 协议与 Socket.IO 模块156利用Websocket实现聊天室177websocket与jquery的结合19结束语21介绍篇:什么是node.js在介绍node.js之前,我们首先了解一下node.js的重要性,看看都有谁在用它。微软的云服务Azure已经开始支持Node.js、还有就是Ebay、Yahoo、Linkedin,这些IT界的大佬都在用,node.js未来肯定是光明的。下面再说什么是node.js,node.js的官方网站

4、这样自我描述:Node.js is a platform built on Chromes JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed device

5、s.翻译过来就是:Node.js 是一个平台,建立在 Chrome JavaScript 运行时之上,目的是建立快速、可伸缩的网络应用。Node.js使用事件驱动,非阻塞的 I/O 模式,这使得他是轻量而高效的,能够在分布设备上完美运行高数据吞吐的实时应用。如果还想深入了解,可能还需要您去了解一下google的V8引擎。介绍到此为止,下面我们来看一下node.js的适用场景。Node.js的适用场景Node 旨在解决什么问题Node 公开宣称的目标是 “旨在提供一种简单的构建可伸缩网络程序的方法”。当前的服务器程序有什么问题?我们来做个数学题。在 Java 和 PHP 这类语言中,每个连接都会

6、生成一个新线程,每个新线程可能需要 2 MB 配套内存。在一个拥有 8 GB RAM 的系统上,理论上最大的并发连接数量是 4,000 个用户。随着您的客户端基础的增长,您希望您的 web 应用程序支持更多用户,这样,您必须添加更多服务器。当然,这会增加业务成本,尤其是服务器成本、运输成本和人工成本。除这些成本上升外,还有一个技术问题:用户可能针对每个请求使用不同的服务器,因此,任何共享资源都必须在所有服务器之间共享。例如,在 Java 中,静态变量和缓存需要在每个服务器上的 JVMs 之间共享。这就是整个 web 应用程序架构中的瓶颈:一个服务器能够处理的并发连接的最大数量。Node 解决这

7、个问题的方法是:更改连接连接到服务器的方式。每个连接都创建一个进程,该进程不需要配套内存块,而不是为每个连接生成一个新的 OS 线程(并向其分配一些配套内存)。Node 声称它绝不会死锁,因为它根本不允许使用锁,它不会直接阻塞 I/O 调用。Node 还宣称,运行它的服务器能支持数万个并发连接。事实上,Node 通过将整个系统中的瓶颈从最大连接数量更改到单个系统的流量来改变服务器面貌。ESTful API提供 Restful API 的 Web 服务接收几个参数,解析它们,组合一个响应,并返回一个响应(通常是较少的文本)给用户。这是适合 Node 的理想情况,因为您可以构建它来处理数万条连接。

8、它仍然不需要大量逻辑;它本质上只是从某个数据库中查找一些值并将它们组成一个响应。由于响应是少量文 本,入站请求也是少量的文本,因此流量不高,一台机器甚至也可以处理最繁忙的公司的 API 需求。Twitter 队列想像一下像 Twitter 这样的公司,它必须接收 tweets 并将其写入数据库。实际上,每秒几乎有数千条 tweet 达到,数据库不可能及时处理高峰时段所需的写入数量。Node 成为这个问题的解决方案的重要一环。如您所见,Node 能处理数万条入站 tweet。它能快速而又轻松地将它们写入一个内存排队机制(例如 memcached),另一个单独进程可以从那里将它们写入数据库。Nod

9、e 在这里的角色是迅速收集 tweet,并将这个信息传递给另一个负责写入的进程。想象一下另一种设计(常规 PHP 服务器会自己尝试处理对数据库本身的写入):每个 tweet 都会在写入数据库时导致一个短暂的延迟,因为数据库调用正在阻塞通道。由于数据库延迟,一台这样设计的机器每秒可能只能处理 2000 条入站 tweet。每秒处理 100 万条 tweet 则需要 500 个服务器。相反,Node 能处理每个连接而不会阻塞通道,从而能够捕获尽可能多的 tweets。一个能处理 50,000 条 tweet 的 Node 机器仅需 20 台服务器即可。电子游戏统计数据如果您在线玩过使命召唤这款游戏

10、,当您查看游戏统计数据时,就会立即意识到一个问题:要生成那种级别的统计数据,必须跟踪海量信息。这样,如果 有数百万玩家同时在线玩游戏,而且他们处于游戏中的不同位置,那么很快就会生成海量信息。Node 是这种场景的一种很好的解决方案,因为它能采集游戏生成的数据,对数据进行最少的合并,然后对数据进行排队,以便将它们写入数据库。使用整个服务器来跟踪 玩家在游戏中发射了多少子弹看起来很愚蠢,如果您使用 Apache 这样的服务器,可能会有一些有用的限制;但相反,如果您专门使用一个服务器来跟踪一个游戏的所有统计数据,就像使用运行 Node 的服务器所做的那样,那看起来似乎是一种明智之举。映像文件服务器一

11、个拥有大型分布式网站的公司(比如 Facebook 或 Flickr)可能会决定将所有机器只用于服务映像。Node 将是这个问题的一个不错的解决方案,因为该公司能使用它编写一个简单的文件检索器,然后处理数万条连接。Node 将查找映像文件,返回文件或一个 404 错误,然后什么也不用做。这种设置将允许这类分布式网站减少它们服务映像、.js 和 .css 文件等静态文件所需的服务器数量。下面回答一些对于node.js和旧知识的一些问题1服务端JS的实现,和我们传统的服务端实现相比,优势在哪里呢?答:从几个方面看1、和传统的服务端脚本语言, 原生的非阻塞io,能够很大程度上提高并发负载能力2、对于

12、java,c等直接开发的非阻塞服务,在开发效率和成本上要更胜出.3、从语言特性上讲,js语言本身对事件机制由很好的支持,2 node.js的开发效率和成本,具体体现在哪呢?答:1、java的nio实现代码量要比node多出很多,c的就要更多,而且debug起来比较复杂。2、相对ruby等语言,node在执行效率上又胜出不少,而且node无协程个人觉得是比较好的选择。有了这些相信您对node.js已经有了极大的兴趣,下面我们来到node.js使用的第一步:安装node.js和命令使用篇:1 Node.js 的安装和控制台命令Windows系统的node.js安装非常简单,只需在官方网站上下载wi

13、ndows的安装包一个.msi文件,双击安装就可以了,由于安装较为简单,在此不做描述。这里需要注意的就是,我曾经在装完之后去找快捷方式,结果什么都没找到,安装时也没有指定node.js安装到了哪里,不过根据平时对windows的了解,很快在C:Program Files (x86)这个文件夹里找到了nodejs文件夹(注:本人是64位windows7系统),而且环境变量默认是已经配好了的。此时我们打开命令行窗口,发现输入node时不显示没有此命令提示了,说明我们已经安装好了。当打开NodeJS文件夹的时候,您会发现有几个东西不知道是干什么用的,在此先说明一下,node_modules里装的是N

14、odeJS的模块,而nodejs的核心魅力都在这里面。而npm是用来管理模块的,如果您对linux有所了解,对npm也一定不会陌生。现在您所学的javascript知识都将派上用场,因为node.js使用的就是V8引擎,在这里我们就可以跑javascript代码了。为数不多的控制台命令可以用.help命令找到现在万事俱备,我们可以开始node.js之旅了。2架一个HTTP服务上回说道:在 Windows 平台,node.js 可以精简到一个可执行文件,运行这个文件,我们就得到了一个控制台,在这个控制台,我们可以以 REPL (Read-Eval-Print-Loop) 的方式交互的执行js代码

15、。一、批量执行代码现在面临的一个问题是:如何批量执行 js 代码呢?回答是:可以将 js 代码放进一个文件,然后键入如下命令此时已经表明我们的.js程序运行成功了!二、前端呢?还是后端?这是个问题。 我们知道,Javascript 就是依靠浏览器的,没有浏览器它什么都不是所以,估计您和我一样,第一次接触到 Node.js 时,会误以为是一个新的前端框架。但事实是:Node.js 目的是为了建立服务器端应用的。在以后我们会完成搭建聊天室等任务,而且都是用很简单的代码完成,完全不用什么web服务器或者高级语言,相信完成之后nodejs会让您刮目相看。三、模块模块 刚上大学时学 C 语言的时候大家都

16、知道,没有include ,连最简单的helloworld都没法做。任何语言,失去了强大类库的支持都是弱弱的任何成熟的语言,都是采用把强大的功能打包成类库的方式,实现语言的高扩展的。 之所以很多人感觉javascript有一种神秘色彩或者感觉它功能有很大的局限性,就是因为缺少强大的类库。所以,一帮IT牛人开始考虑解决这个问题了,这个项目就是 CommonJS 。CommonJS 希望实现一个 Javascript 标准类库,使开发者能够利用 Javascirpt 来开发下列类型的应用: 1、服务器端应用; 2、命令行工具; 3、桌面基于 GUI 应用 4、混合应用(Titanium, Adob

17、e AIR) node.js 是 Common.JS 的实现者之一。这时我们该了解一个重要的函数了require 函数。使用这个函数来引入别的模块,通俗点说它类似于 include(C) 、 import(JAVA) 。比如,node.js 内置了个模块,专门帮助我们实现 http 服务。我们只需要:var http = require(http); 就可以开始使用该模块的功能了,目前就本人所知node.js 官网现在已经注册了 5747 个第三方模块。安装这些模块也非常的简单,不过,还是先来完成第一个吧。四、HTTP 服务之 Hello World我们只用几行代码就可以实现一个http服务,

18、先不要惊讶,见如下代码然后保存成 app.js 文件,并用:node app.js 运行。然后可以用浏览器访问了,地址是:http:/localhost:888 。因为默认的80端口可能会有冲突,所以在这里我们使用了888端口。但是我们发现没有任何效果,这是因为:http.createServer 其实是可以带参数的,而在这里我们省略了参数, http.createServer 的参数应该是一个函数。这个函数在每次有 http 请求进来的时候就会跑一遍,也就是说,我们每用浏览器访问一次上面的地址,我们传进去的函数就运行一遍。下面我们再修改代码:好,现在再访问试试。浏览器还是什么都没有。不过,每

19、次我们刷新浏览器,后台都会告诉我们访问进来了。就这样,一个http服务架成了,下一篇我们将完成一个helloworld3完成HelloWorld刚刚我们用node.js快速而方便的搭建了一个http服务器,现在我们要把helloworld发送出去。大家知道,我们的Web应用抽象起来就是客户端发出请求 request,请求到达服务器后,服务器给客户端发回一个应答response。服务器和客户端之间交流的语言就是 HTTP 协议。总之在web应用中的两个至关重要的东西就是request和response。上一篇我们说到,每次有访问,我们的函数都会运行一次,所以只要把request和response

20、作为参数传递给tellme函数,然后当请求到达时,node.js 就会把客户的请求封装成 request ,预备发给客户的应答封装成 response。我们拿到 request ,看看他请求些什么,再把一些东西(如读出个文件或去查数据库)封装进进 response ,发给客户端。代码如下:运行他,再用浏览器访问他。在浏览器得到了“Hello world!”,再看看服务器的控制台这一大串的就是 Request 了,它使用的是json格式,观察 request 对象,我们可以找到一些我们熟悉的东西。比如:request.url、request.method、比如 headers,可以简化一下后台:

21、 后台的显示内容一目了然。至此HelloWorld示例结束,下一节是利用nodejs创建一个支持静态页面的web服务器。4搭建一个静态的web服务器如果想深入了解某个对象,可以在 repl 环境下,把这个对象打印出来。例如引入的 http 模块,可以 repl 提示符下键入:node require(http)然后回车,会出现由此可见状态代码无需看文档即可查看。下面开始正题,搭建一个支持静态页面的web服务器一读写文件为了完成搭建静态服务器,我们需要引入文件 I/O ,node.js 内置了 fs 模块,引入就可以读写文件了。请按下列方式组织目录: Webserver |_ app.js |_

22、 root |_ index.htm这里 root 文件夹就是存放页面的地方,稍懂一点web服务器的都很容易明白,这里不多做解释。一会我们要把内容从文件里读出来,显示在控制台并发送给浏览器。 在写代码之前,我们先用前面的方法查看 fs 模块:fs 里方法有很多。现在我们需要去查官网文档,我们就用fs.readFile方法。测试该方法的代码建议您自己先写一个,能更方便您了解和学习,本节代码如下:注:_dirname是两个下划线_ _!二、分析请求路径我们已经实现了读取文本文件,并送到客户端浏览器的工作。但是读取的文件名是硬编码在代码里的。现在我们需要让用户来指定他需要什么文件,然后读出来给发过去

23、。而用户指定的路径和文件名这个信息是通过 request 传过来的,request 的众多的属性里,有一个为 url 属性,以前我们都是通过 url 来映射文件的路径的。不过到了现在 MVC 和 REST 时代,情况开始变得有些复杂,这里暂且不提。解释代码之前,我们先砍一下url,一条 url 一般可以分成主机地址、路径和键值对,如图:我们尝试引入url模块,用这个工具来解析了一串示例,得到一个对象。其中 pathname 就是我们要的,不过现在我们需要将它映射为我们服务器端的绝对地址,代码如下(由于代码较长,截图不便,直接给出):var http = require(http), fs =

24、require(fs), urlutil = require(url), path = require(path); http.createServer(function(request, response) /get path from requests url var urlpath = urlutil.parse(request.url).pathname; /map the path to server path var absPath = _dirname + /webroot + urlpath; /test whether the file is exists first pat

25、h.exists(absPath, function(exists) if(exists) /if ok fs.readFile(absPath,function(err, data) /our work is here if(err) throw err; console.log(data); response.write(data); response.end(); ); else /show 404 response.end(404 File not found.); );).listen(888);console.log(Server start in port 888.);至此本节结

26、束,下一节的内容是利用nodejs和socket.io实现websocket5Websocket的实现一、 WebSocket 是什么百度百科上说WebSocket 规范的目标是在浏览器中实现和服务器端双向通信.双向通信可以拓展浏览器上的应用类型,例如实时的数据推送(股票行情),游戏,聊天/im 等,而且websocket实现的是全双工通信。二、 与传统的http相比,它的优点是什么双向全双工,持续连接,实时、事件驱动,低带宽消耗,文档、二进制均可,客户端不局限于浏览器。三、 WebSocket 能干什么理论上,socket 能干什么,他就能干什么想要再具体了解websocket,请参见web

27、socket官网。四、 WebSocket 协议与 Socket.IO 模块Node.js 的第三方模块Socket.Io(详见socket.io官网)提供在 Node.js 上使用 WebSocket 协议的能力,我们需要安装socket.io,由于我们最后目的是要建立一个聊天室,所以我们先建一个文件夹,取名为chatroom,打开命令行窗口,移步到 chatroom 目录下,键入如下命令:D:chatroom npm install socket.io d由于我已经安装完成,这里不给出安装过程图了。准备工作完成后,我们还是先写一个最最最简的架子,然后测试,代码如下:如果见到如下图,则说明运

28、行成功现在我们可以说已经实现了一个websocket了,下一节我们将利用websocket搭建一个聊天室。6利用Websocket实现聊天室刚刚我们成功的实现了websocket,下面进入最激动的部分,实现聊天室:在 chatroom 文件夹下建一个chatClient.htm ,代码如下: Chat Client var socket = io.connect(http:/localhost:888);socket.on(user message,function(msg)msgbox(msg.msg););function sendMsg()var inpt = document.getE

29、lementById(txtInput);var str = inpt.value;msgbox(str);/send to serversocket.emit(msg,msg:str);console.log(client + str);inpt.value = ;inpt.focus();function msgbox(str)var box = document.getElementById(box);box.innerHTML += str + ; #box overflow: auto;width:500px;height:300px;border:1px solid #dcdcdc

30、;#txtInput width:430px; Chat Client 运行服务器端 app.js 文件,然后,用浏览器打开 chatroom.htm 文件,观察服务器控制台:此时显示websocket已经连接成功!聊天室搭建完成。这时我们再打开两个浏览器窗口访问:localhost:888就可以互相通信啦,至此聊天室搭建成功,本节结束。7websocket与jquery的结合flash 中有一个 share object ,可以让大家通过网络共享一个对象。曾经有个示例,就是甲拖动屏幕上的小球,乙的屏幕上的小球也同样被拖动了,乙也同样可以拖动的动作共享给甲。完成这样的功能需要 Flash Me

31、dia Server,不过利用前面我们的nodejs,我们已经可以实现这个案例了而且不用插件。js代码如下:页面html代码如下:Share Object script src= script src= #draggable width: 100px; height: 70px; background: red; var p = ; var socket; $(document).ready(function() socket = io.connect(http:/localhost:888);socket.on(bPosition,function(data) setPosition( da

32、ta.position ););socket.on(connect, function()info(Connected to server ok.);); $(#draggable).draggable(stop:function(event,ui)p.x = ui.position.left;p.y = ui.position.top;socket.emit(cPosition,position:p);info( p.x + + p.y);); ); function info( str ) $(#info).append( str + ); function setPosition( p

33、) $(#draggable).css(top:p.y,left:p.x); var socket = io.connect(http:/localhost:888);SHARE OBJECTDrag me这个例子结合了websocket与jquery. 结束语对nodejs的学习暂时告一段落,IT行业技术发展太快,旧技术很快就会被新技术取代,想要再IT行业立足,必须与时俱进,了解新兴技术,而nodejs必定是未来的宠儿,尽管现在它的中文资料等等尚不齐全,相信国内会有很多人对它的重要性认识上去,本文档通过一些简介和几个示例不足以概括nodejs的所有功能,充其量只是九牛一毛,想要再深入去学习必须还要靠自己去探索,本文档到此告一段落,希望以后有人能对此进行大量补充。祝您学习进步。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号