基于nodejs的小型框架设计与实现.docx

上传人:b****1 文档编号:14605730 上传时间:2023-06-24 格式:DOCX 页数:54 大小:1.06MB
下载 相关 举报
基于nodejs的小型框架设计与实现.docx_第1页
第1页 / 共54页
基于nodejs的小型框架设计与实现.docx_第2页
第2页 / 共54页
基于nodejs的小型框架设计与实现.docx_第3页
第3页 / 共54页
基于nodejs的小型框架设计与实现.docx_第4页
第4页 / 共54页
基于nodejs的小型框架设计与实现.docx_第5页
第5页 / 共54页
基于nodejs的小型框架设计与实现.docx_第6页
第6页 / 共54页
基于nodejs的小型框架设计与实现.docx_第7页
第7页 / 共54页
基于nodejs的小型框架设计与实现.docx_第8页
第8页 / 共54页
基于nodejs的小型框架设计与实现.docx_第9页
第9页 / 共54页
基于nodejs的小型框架设计与实现.docx_第10页
第10页 / 共54页
基于nodejs的小型框架设计与实现.docx_第11页
第11页 / 共54页
基于nodejs的小型框架设计与实现.docx_第12页
第12页 / 共54页
基于nodejs的小型框架设计与实现.docx_第13页
第13页 / 共54页
基于nodejs的小型框架设计与实现.docx_第14页
第14页 / 共54页
基于nodejs的小型框架设计与实现.docx_第15页
第15页 / 共54页
基于nodejs的小型框架设计与实现.docx_第16页
第16页 / 共54页
基于nodejs的小型框架设计与实现.docx_第17页
第17页 / 共54页
基于nodejs的小型框架设计与实现.docx_第18页
第18页 / 共54页
基于nodejs的小型框架设计与实现.docx_第19页
第19页 / 共54页
基于nodejs的小型框架设计与实现.docx_第20页
第20页 / 共54页
亲,该文档总共54页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于nodejs的小型框架设计与实现.docx

《基于nodejs的小型框架设计与实现.docx》由会员分享,可在线阅读,更多相关《基于nodejs的小型框架设计与实现.docx(54页珍藏版)》请在冰点文库上搜索。

基于nodejs的小型框架设计与实现.docx

基于nodejs的小型框架设计与实现

计算机科学与技术学院

毕业设计(论文)

论文题目

基于Node.js的小型框架设计与实现

指导教师

x

职称

x

学生姓名

x

学号

x

专业

x

班级

x

系主任

x

院长

x

起止时间

2012年11月25日至2013年6月6日

2013年6月6日

 

 

基于Node.js的小型框架设计与实现

摘要:

node.js是一种新的软件开发平台,它不仅是一门独立的语言,也与Python、Ruby一样,既是语言也是平台。

node.js将javascript从浏览器移植到了普通服务器上。

使得javascript也能实现了诸如文件系统、操作系统、网络通信等功能。

Node运行在Chorme的V8引擎上,采用异步I/O与事件驱动的架构设计和单线程模型,并且内置了HTTP服务器,主要用于构建高性能,高并发,高扩展的服务器。

node.js具有高性能的同时,对于底层的封装比较低,如一般的请求数据等都需要分析Http协议并将所需的数据从request数据流中解析出来,没有提供如javaweb般丰富的API,这既是优点也是缺点,优点在于为开发者提供了非常大的自由性,可以利用底层接口完成各种各样的功能,缺点在于直接使用底层接口做系统应用开发,效率非常低下,因为需要分析和处理各种数据。

node.js刚推广不久,国内还比较缺少使用node.js做应用开发的框架,如果直接使用node.js底层API进行应用开发有较大的困难,基于此点,本论文开发设计一个简单小型的MVC框架,简化node.js的使用的同时提高开发效率。

目前web应用中,普遍使用了MVC模式(即Model-View-Controller,模型,视图,控制器)。

如基于JAVAEE的Struts2+Spring3+jspMVC模式等。

借鉴这些其他平台上现有的框架结构和功能,设计开发FastJsonWeb框架。

本框架将封装node.js的底层接口,对请求数据等提供统一简洁的方式,从而较大幅度的提升开发效率。

基于对不同平台现有框架分析提取出本框架的功能点。

这些功能点包括路由转发与映射,属性注入,Cookie实现,Sesison实现等。

关键词:

node.js;javascript;

ABSTRACT

Node.jsisnotonlyaseparatelanguage,butanewsoftwaredevelopmentplatform.JustlikethePythonandtheRuby,theyarebothlanguageandplatform.Node.jstransplantthejavascriptfromyourbrowsertoacommonserver.ThatmakesJavaScriptcanachieveasfilesystems,operatingsystems,networkcommunications,andotherfunctions.TheNode.jsisalwaysrunninginChormeV8engine,withasynchronousI/Oandevent-drivenarchitecturedesignandsingle-threadedmodel,andbuilt-inHTTPserver,mainlyforbuildinghigh-performance,high-concurrency,highlyscalableserver.Node.jsreallygetahighperformance,whilethepackageofbottompartislowenough.Forexample,thecommondatarequestedneedanalysisofHTTPandanalyzetherequireddatafromtherequestdatastream,withoutprovidingarichjavawebAPI.Thisstyleofferedanadvantageandadisadvantage.Theadvantageisthatitprovidedthedeveloperswithalotoffreedomsothatthedeveloperscanusethelow-levelinterfacetocompleteavarietyoffunctions,whilethedisadvantageisthatthedirectuseofthelow-levelinterfaceforsystemapplicationdevelopmentgotverylowefficiency,becauseoftheanalyzingandprocessingforthevariouskindsofdataneedalotofresources.Node.jsisjustcarriedour,inourcountry,theframeworkusedthenode.jsindoingapplicationdevelopmentisstilllacking.AdirectlyuseoftheNode.jsunderlyingtoworkonanapplicationdevelopmentmaybemuchmoredifficult.Inordertodealwiththiskindofsituation,thisarticlewilldescribeadesignofasimpleandsmallMVCframeworktosimplifiedtheuseofNode.js,andtoimprovethedevelopmentefficiencyatthesametime.

Nowadays,WebapplicationsgetawideuseoftheMVCpattern(Model-View-Controller,Model,View,Controller).SuchastheStruts2+Spring3+jspMVCmodelbasedJAVAEE.Learningfromthestructureandfunctionoftheseexistingframework,thisarticletrytodescribethedesignanddevelopmentofFastJsonWebframework.ThisframeworkwillpacktheNode.jsunderlyinginterface,andprovideaunifiedandconcisemannertotherequestdata,whichwillimprovethedevelopmentefficiencyalot.Thisarticlewillextracttheframeworkfunctionpointsaccordingtotheanalysisoftheexistingframeworkofdifferentplatforms.Thesefunctionpointsincludetherouteforwardingandmapping,propertyinjection,cookieachievementandSesisonachievementandsomethingmore.

第一章绪论

1.1node.js介绍

随着网络技术的发展和网络平台的推广,越来越多的应用是基于网页形式来提供。

其中javascript是网页应用技术中不可缺少的一部分。

Javascript跟随网络技术的发展得到了也得到了大幅的提升。

越来越多的人使用javascript。

由于javascript在浏览器端具有极高的执行效率,并且兼容多种流浪器,这促使其中一部分人思考是否可以把javascript放在服务端运行,能够像其他web语言一样提供业务逻辑处理。

于是不久node.js便诞生了。

node.js是一种新的软件开发平台,它的特殊性决定了它不仅可以作为一门开发编程语言,也可以像Ruby

、Pythond等语言一样作为一个开发者平台。

node.js将javascript从浏览器移植到了普通服务器上,它运行在Chrome的V8高速引擎上,实现了操作系统访问、网络通信、文件读写等功能。

目前web应用普遍采用Tomcat,ApacheServer,IIS等做HTTP服务器,HTML,CSSjavascript做前端展示,以浏览器<->服务器<->后台容器模式来进行请求应答。

该模式下请求通过了一层或多层转发,使得通信效率较低。

而在Node中,后台容器用C++语言设计把服务器和容器本身融合在一起,采用浏览器<->后台容器模式进行请求应答,大大提高了通信的效率。

不同于其他的语言的线性执行,Node采用事件驱动机制,充分利用了CPU的时间片轮转机制,很大程度上降低了CPU的空闲率,同时它异步I/O与事件驱动的架构设计和单线程模型对于构建高性能,高并发,高扩展的服务器具有相当大的优势。

因此,采用node.js为后台的web应用或者企业应用能够较大程度的降低硬件成本和提高应用处理业务的效率。

新的开发平台,需要新的发展。

1.2node.js平台的优势领域

node.js自身融合入HTTP服务器,这对于组合网站和服务器是非常简单方便的。

这是它和其他web语言如PHP、Perl的不同所在。

比如,在使用PHP进行业务系统开发,首先必须搭建一个HTTP服务器如Apache,IIS之类。

然后通过该Http服务器的模块加载或CGI调用,将脚本的执行结果反馈显示在用户端。

使用node.js平台好处之一在于不用额外搭建HTTP服务器,node.js本身融合的Http服务器既可以作为开发阶段的调试环境也可以直接作为产品提供给客户使用。

除此之外,自带的服务器性能足以满足生产环境的要求。

node.js既可以在网络环境下运行也可以非网络的环境下运行,如即时编译终端。

node.js虽然使用javascript语言,但是它同样可以调用C或者C++的函数库,完成对性能要求非常高的功能的实现。

事件驱动与异步式I/O模型。

node.js最大的特点就是采用异步式I/O与事件驱动的架构设计。

传统架构对于高并发的解决方案是采用多线程模型,也就是一个系统线程处理一个业务逻辑,通过系统线程切方式弥补同步式I/O的时间开销。

node.js采用的是单线程模型通过异步式的请求方式处理I/O调用,减少了切换上下文次数所造成的开销。

node.js运行的过程中将管理一个事件堆栈,不断地循环执行事件然后等待下一个事件的触发。

异步式I/O请求完成后将被推送到事件队列,等待主进程进行处理。

基于事件的异步处理机制的node.js对于所有的网络通信、磁盘读写、数据库操作等都以异步请求的方式实现,最后将执行得到的结果交给事件循环进行处理。

下图1.1描述了这个机制。

图1.1

node.js进程在进行事件处理时具有时间的唯一性,它不会同时处理多个事件请求,在处理完一个事件后就进程就进入下一个事件循环,检查并继续处理后面的事件。

这样做优点在于能够集中CPU和内存资源快速处理某个事件,并且尽量让耗费资源的I/O操作并行执行。

在应对恶意访问方面,node.js对于低速的DOS攻击,node.js只增加事件堆栈中的请求请求树立,而不会马上给出请求应答,这样有效的减少了线程资源的开销,很大程度上提高了Web应用的健壮性和安全性。

由于node.js采用事件驱动与异步式I/O代替多线程,较大幅度的提升性能。

此外node.js除了使用Google的ChromeV8作为JavaScript引擎,它还使用了高效的libeio和库libev支持事件驱动和异步式I/O。

node.js架构的示意图如下

图1-2

设计node.js的开发者从libev和libeio库中进一步封装出来出libuv层。

在Windows下,libuv使用了Windows的IOCP(Input/OutputCompletionPort,输入输出完成端口)机制,实现高性能,而对于Linux、UNIX,MacOSX等操作系统,node.js的libuv库通过使用libeio和libev的封装来利用kqueue或epoll。

以上简单介绍了node.js。

那么为网络而生的node.js能够做一下事情。

(1)大规模的社交网络Web应用,如微博,FaceBook等。

(2)具有复杂逻辑的网站;如一般的MIS系统。

(3)WebSocket服务器;如游戏引擎。

(6)TCP/UDP套接字应用程序,即时通信系统;

(7)客户端JavaScript编译器。

由于node.js具有以上优点,所以对于web应用来说node.js是优秀的开发平台。

1.3node.js平台的非擅长领域

一个优秀的平台能够吸引大量开发者的关注。

node.js有许多传统架构不具备的优点,以至于开发者愿意用node.js来做应用开发。

但是node.js与其他任何平台一样,都存在优点和缺点,如果非要使用它的缺点来完成业务需求,那么同样会遇到困难和僵局。

尽管它是高性能的,新颖的,但也不得不写出难以理解的逻辑代码。

与大多数新语言平台本质一样,node.js也是旧瓶装新酒。

只不过概念比较新潮,它不能完成所有的业务逻辑,或者说它不是万能的。

前一节提到node.js的平台优点,本节则简要介绍下node.js的短板所在。

(1)多任务的单用户应用

前面介绍的都是服务器端编程,设计时的情况是用户数量很多。

但如果面对的是单用户,譬如本地的命令行工具或者图形界面,那么就不存在所谓的大量并发请求。

于是另一个问题出现了,尽管是单用户,却不一定是执行单任务。

例如在给用户提供界面的时候后台需要进行某个计算,为了使用户界面不出现阻塞状态,不得不开启多线程或多进程。

而到目前为止node.js的线程或进程之间的通信还不方便,因为它根本没有资源锁,所以号称不会

死锁。

多进程的node.js往往是在执行同一任务,通过多进程利用多处理器的资源,但遇到多进程相互协作时,node.js的短板就出现了。

(2)编码与国际化

node.js不支持完整的UTF-8字符编码,很多字符无法用string表示。

实际上来说这不是node.js本身造成的,问题而是出在JavaScript标准上。

目前JavaScript支持的是双字节的UCS2字符集,即两个字节来表示一个Unicode字符,这样能表示出来的字符数是65536。

明显,汉字就不止这个数目。

因此无法表示某些生僻汉字,以及一些较为罕见语言的文字。

这是设计的问题,源于当时设计者的主观判断。

最初的Unicode设计者认为65536个字符足以表示全世界所有的文字,因此那个时候兼容Unicode的系统或平台,如Windows、Java和JavaScript在后来都遇到这个问题。

随后Unicode意识到用2个字节表示所有字符是远远不够的,随后推出了UCS4编码,即用4个字节来表示一个Unicode字符。

原有的定长编码的UCS2系统为了变长的UTF-16编码进行了升级处理,所以只有它向下兼容UCS2。

UTF-16编码采用定长的双字节编码处理UCS2以内的字符,对于以外的部分则使用多字节的变长编码。

这样在通常情况下它的编码是定长的,有利于提高运算效率并且且兼容了UCS2编码,缺点是它本质还是变长编码,在应用程序中处理起来还是存在不便之处。

JavaScript当下支持的仍是定长的UCS2编码而不是UTF-16,因此对于处理使用UCS4进行编码的字符无能为力。

这个缺陷存在于现有的所有JavaScript引擎。

包括Chrome的V8引擎在内。

因此你无法处理罕见的字符的时候,想用node.js实现一个多语言的字典工具是不可能做到的,除非放弃使用javascript原有的string数据类型,将所有的字符当作二进制的Buffer数据来处理。

(3)复杂逻辑的事务

node.js的控制流是非线性的,它由一个个事件响应组成,但人的思维却是线性的,当试图转换思维来适应语言或编译器时,就得付出性能或者编码方面的代价。

举个例子,如要实现以下逻辑:

从银行取钱,用钱去购买一个虚拟商品,买完以后加入库存数据库,这中间的任何一步都会涉及数十次甚至更多的的I/O操作,而且任何一次操作失败以后都需要进行回滚操作。

这个过程是复杂的线性的,假如拆分为非线性的逻辑,那么其复杂程度将提升几个数量级。

node.js更善于处理那些逻辑简单但访问频繁的任务,而不适合完成逻辑十分复杂的工作。

(4)需要大量计算的程序

node.js(在0.8版本以前)不支持多线程。

node.js的设计者和追随其的开发者坚信单线程和事件驱动的异步式编程比传统的多线程编程运行效率更高。

但实际上多线程通过较大的开销也能达到同样的吞吐量,而且不必为多核环境进行特殊的配置。

对比而言,node.js其单线程性的特性,如果需要充分利用多核资源则需要使用多进程的方法才能达到

node.js理想情况下的单线程执行过程会将100%利用CPU核心资源,所有请求须等待当前请求处理完毕后才进入事件循环才能响应。

如果应用是需要进行大量的计算除非人为地分开计算,否则将会有相当大的请求响应延迟。

不过在实际使用中的Web服务器中,很少需要大量计算的部分很少,即使存在,那么不应该被实现为即时的响应。

一般的处理办法是后台处理完成后给前台客户端异同处理完成的通知。

1.4开发框架的原因

node.js刚推广不久,国内还缺少使用node.js做应用开发的框架。

Node.js只提供底层的http接口。

缺少丰富的上层应用接口。

直接使用底层接口做开发需要分析大量的http协议内容。

对于开发效率有着严重的制约。

基于此点,本论文开发设计一个简单小型的MVC框架,简化node.js的使用难度的同时提高开发效率。

目前web应用中,普遍使用了MVC模式(即Model-View-Controller,模型,视图,控制器)。

如基于JAVAEE的Struts2+Spring3+jspMVC模式等。

借鉴这些其他平台上现有的框架结构和功能,设计开发FastJsonWeb框架。

本框架将封装node.js的底层接口,对请求数据等提供统一简洁的方式,从而较大幅度的提升开发效率。

基于对不同平台现有框架分析提取出本框架的功能点。

这些功能点包括路由转发与映射,属性注入,Cookie实现,Sesison实现等。

1.5开发框架存在的问题

小型的MVC框架意味着该框架应具有易用性和高效性,能够很大程度上满足大多数业务的逻辑。

在现有的已存在的Node的MVC框架中,如Express,已经能够满足大多数业务逻辑,但是因为是国外开发,其文档资料大多数是英文编写,需要高昂的学习成本,而且大多数功能对于一般的应用是冗余的,加之配置复杂,遇到问题无法得到有效快速的解决途径,贸然采用存在大的风险。

而自己开发,虽然时间周期长但因为其可重用性,还是具有较高的价值。

由于平台的新颖性,多数API还处在变化之中,因此设计开发该框架主要存在以下一些问题。

(1)node.js还处于高速发展阶段,API不稳定,处在不断更新变化中,如果采用某个固定版本,则可能存在bug或者无法使用新特性。

如果跟随版本变化则框架的稳定性无法保证。

(2)node.js平台资料困乏。

主要表现在两个方面,一是新平台国内研究使用的人暂时不多,遇到问题无法立马得到咨询有效的解决;二是缺乏中文资料,有关资料只能去node.js的官方文档查询而且是英文。

问题的交流只能在StackOverflow等国外论坛但是是英文环境,交流存在一定的困难。

(3)node.js对于Window平台支持不是好,一些常用工具无法安装。

缺乏良好的桌面开发环境,对于类Unix系统的使用,如Linux的发行版Ubuntu有生疏性,无法得心应手。

(4)缺乏有效的开发工具。

如今不管哪个系统平台下,javascript开发IDE都很少,或者难以使用,缺乏有效的调试工具,编码效率得不到提高。

(5)由于node.js基于事件驱动和异步I/O,对于业务逻辑的处理往往不同于一般线性编程,难以打破线性编程的思维僵局。

(6)node.js封装性非常低,对于一些常用操作,如Cookie,Seesion等都需要根据Http头信息重新实现,难度较大。

(7)目前没有任何一个官方文档规定node.js的代码风格,为了保持框架代码的可读性和可维护性,需要定制某一标准,方便今后的维护。

以上七点主要是分析了node.js平台存在的不足和一些设计实现的困难之处。

1.6本章小结

该章简单的介绍了node.js平台架构,使用node.js的局限性和其优点以及框架进行设计与开发存在的难点。

第二章开发工具及技术综述

本章主要是介绍框架设计与实现过程中主要使用到的设计工具、开发工具、开发平台以及javascript的一些高级语言特性。

工具有vim和git,平台主要是github与Ubuntu。

除此以外,还将介绍在Ubutun下如何搭建node.js开发平台。

2.1使用工具简介

2.1.1文本编辑器Vim

简介

Vim是从vi发展出来的一个文本编辑器。

具有代码补全、终端编译及错误跳转等提供编程效率的功能。

Vim在程序员中被广泛使用,与Emacs并列成为类Unix系统用户最受欢迎的编辑器。

设计理念

vim的设计理念是组合。

包括命令组合和模式间的组合。

命令组合:

Vim强大的编辑能力中很大部分是来自于其普通模式命令。

vim的设计理念是命令的组合。

例如普通模式命令"dd"删除当前行,"dj"代表删除下一行,因为是第一个"d"含义是删除,"j"键代表移动到下一行,组合后"dj"删除当前行和下一行。

类似的命令组合非常丰富,只要拥有足够的创造力就可以灵活的组合各种命令进行使用,这样就能更加高效的进行文本编辑。

vim针对程序语言代码编写者。

写代码的时候手需要时刻保持在键盘上,随机定位代码、随机删除代码、移动代码、插入代码的操作大大多于阅读、翻页操作,中间卡顿一下效率就大大降低了;但对普通用户而言,顺序写、设置字体格式、翻页读多于随机写删除操作,且每个动作之间本身就有很多的停顿,用其他UI编辑器(word,notePad++等)效率反而比VIM高效,使用vim进行操作只会徒增代码编写的难度。

主要功能:

1.完全兼容vi

2.多文件数据缓冲编辑

3.编辑窗口切割,分成多个编辑视图

4.可以在脚本中调用其他脚本语言

5.自动单词补全与撤缩

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2