本发明涉及一种基于Node.js的应用服务器,用于提供构建Web应用程序的服务器系统软件环境。
背景技术:
Node.js诞生于2009年5月,是一种构建于Chrome V8引擎的JavaScript运行环境,简单的说Node.js就是运行在服务端的JavaScript,它内建了HTTP服务器,可以直接实现网站和服务器功能。这种服务器端的JavaScript技术极大地增强了系统开发的灵活性。采用Node.js可以直接利用JavaScript进行服务器端逻辑和网页脚本的开发,相对于传统的PHP、JSP等服务器端编程语言而言,给予网站开发者较大的灵活性,无需事先搭建Apache等一类的HTTP服务器。然而,过高的灵活性也带来了标准和编程方法的过度多样性,一般网站开发者较难选择并找出类似于PHP、JSP等服务器端编程语言一类较为方便的开发模式。同时,由Node.js直接创建的HTTP服务器采用了单线程异步事件处理机制,虽然在处理效率上有一定先进性,但考虑到分布式大规模网站应用在系统吞吐率、容错性等方面的需求,单纯依赖于Node.js自身的处理能力和手段较为单一,普通开发者较难构造出高性能、高可靠性的系统。更重要的是,Web服务器一般在线服务的时候采用80端口,当多个独立网站要同时共享一个网络服务器主机的时候,80端口只能由一个Web服务器所独占,此时若直接采用Node.js所自带HTTP服务器支持的功能,则仅仅服务了单个网站应用,浪费了宝贵的80端口资源。
尽管Node.js属于一种极具发展前景、代表未来HTTP网站开发技术发展方向的编程语言和平台技术受到世界各国研究者和开发人员的广泛关注,Node.js技术允许将JavaScript作为网站后台逻辑的开发语言,但这也使得普通网站应用开发者除了要实现自己的网站应用逻辑之外,还必须为自己的网站建立HTTP服务器,增加了工作量和复杂性。基于Node.js所实现的网站属于单线程结构,主要用于单个网站应用,对于大量请求的并发性处理不强,当发生错误时也没有相应的应对措施。因此Node.js作为一种新兴的编程技术,其相应的方法和开发模式还有很多需要进一步完善的方面。
应用服务器是用于承载Web网站等应用和业务逻辑的软件框架和平台,构造一种基于Node.js的应用服务器,可以方便开发者进行新型Node.js网站和应用的开发,从系统效率和容错性方面也有望比单一使用Node.js自身所具备的HTTP服务器更加优越,同时也有望方便地接入多个Node.js网站使其共享同一个网络服务器主机资源。
技术实现要素:
本发明所要解决的技术问题是针对上述现有技术提供一种基于Node.js的应用服务器,用于承载基于Node.js的Web应用,能同时能支持多个应用。
本发明解决上述技术问题所采用的技术方案为:一种基于Node.js的应用服务器,其特征在于:包括:Node.js运行应用服务系统,应用数据资源和外部应用服务器;其中Node.js运行应用服务系统包括应用服务器引擎、本地应用容器和外部应用容器;前述应用服务器引擎包括主进程和承载若干工作子进程的子进程容器,每个工作子进程均被授权使用HTTP服务器和应用域管理器;本地应用容器承载了若干本地应用,本地应用容器包含本地应用接口单元和本地应用管理器,本地应用管理器中的本地应用通过本地应用接口单元与应用数据资源连接;外部应用容器承载了若干外部应用,每个外部应用由外部应用接口单元构成,负责与外部应用服务器交互;
其中Node.js运行应用服务系统的应用服务器引擎监听用户服务请求,当用户发出服务请求后,按以下流程进行处理:
S101、用户发起服务请求;
S102、应用服务器引擎接受用户服务请求并进行以下处理;
S103、若服务请求内容为本地应用,则进行下一步处理,否则转入步骤S107;
S104、根据用户服务请求中的HTTP地址信息获得应用名称,将服务请求送入本地应用管理器内对应的本地应用;
S105、本地应用管理器对应的本地应用获得服务请求后,通过本地应用接口单元调用应用数据资源进行服务请求处理;
S106、本地应用管理器对应的本地应用完成服务请求处理后,将处理结果反馈至应用服务器引擎;
S107、应用服务器引擎根据用户服务请求中的HTTP地址获得应用名称,将服务请求信号送入外部应用容器内对应的外部应用;
S108、外部应用将服务请求信号通过外部应用接口单元转发至外部应用服务器;
S109、外部应用服务器将处理结果通过外部应用容器反馈至应用服务器引擎;
S110、应用服务器引擎将处理结果反馈至用户,实现用户响应。
作为改进,应用服务器引擎进行用户服务请求处理依赖于HTTP服务器和应用域管理器,而子进程容器中有若干个工作子进程,每个工作子进程都具有HTTP服务器和应用域管理器的使用权,应用服务器引擎的具体的工作过程包括如下步骤:
S201、应用服务器引擎启动,开始进入工作状态;
S202、应用服务器引擎创建HTTP服务器;
S203、应用服务器引擎创建应用域管理器;
S204、应用服务器引擎读取服务请求的配置文件,获取配置文件中服务请求的工作子进程数量N;
S205、优化参数N:首先判断N是否小于1,如是,将将N赋值为1;如否,将将N赋值为CPU数量;
S206、创建服务进程管理器;
S207、启动主进程;
S208、在子进程容器中启动N个工作子进程并进入S209继续执行,每个工作子进程转入步骤S211进行处理;
S209、主进程监听工作子进程状态并承载应用域管理器,进行应用域管理;
S210、若出现工作子进程i失效,则重启工作子进程i,转入步骤S209;
S211子进程容器内的N个工作子进程启动后,各个工作子进程获得HTTP服务器和应用域管理器的使用权;
S212、子进程容器内的N个工作子进程进入空闲状态,监听HTTP请求;
S213、若用户发起HTTP服务请求则从子进程容器中选取空闲工作子进程j;
S214、工作子进程j完成HTTP服务请求处理并转入步骤S212,转为空闲状态继续监听服务请求。
再改进,Node.js运行应用服务系统通过应用域管理器实现用户服务请求的分配与派发,进而实现应用服务器对多个应用的支持功能;其中应用服务器引擎的主进程工作流程为:
S301、主进程启动;
S302、主进程启动工作子进程,工作子进程获得应用域管理器;
S303、应用域管理器检索本地应用容器和外部应用容器中的应用;
S304、应用域管理器建立应用列表,将所有应用送入应用列表;
S305、主进程监听工作子进程状态并进行应用域管理;
S306、若发生某一应用程序异常,则转入步骤S309;
S307、若发生工作子进程失效则进入下一步;
S308、主进程重启失效工作子进程;
S309、应用域管理器删除该异常应用,并转入下一步;
S310、若出现新增或删除应用则调整应用列表,并转入步骤S304。
子进程容器内的工作子进程负责将用户服务请求派发到具体的应用,其具体工作流程如下:
S401、工作进程i启动;
S402、工作进程i获得HTTP服务器使用权;
S403、工作进程i获得应用域管理器使用权;
S404、工作进程i进入空闲进程队列,排队等待用户服务请求;
S405、用户发出HTTP请求;
S406、工作进程i出队列,获取用户请求;
S407、工作进程i从HTTP地址中读取用户请求的应用名称;
S408、工作进程i内的应用域管理器将请求送入请求对应的应用;
S409、应用完成请求处理并将结果返回至工作进程i内的HTTP服务器,进而实现用户请求的响应:若该应用为本地应用,则请求送入本地应用容器,再由本地应用容器进行处理,获取应用数据资源,进而完成用户响应;若该应用为外部应用,则请求送入外部应用容器,由外部应用容器调取外部应用服务器进行用户请求响应,返回响应结果;
子进程容器内的多个工作子进程能同时相应不同的用户服务请求。
与现有技术相比,本发明的优点在于:承载了基于Node.js的Web应用,能同时支持多个用户服务请求。
附图说明
图1为本发明实施例中基于Node.js的应用服务器的框图;
图2为本发明实施例中用户服务请求响应过程的总体流程图;
图3为本发明实施例中服务器引擎工作流程图;
图4为本发明实施例中主进程的工作流程图;
图5为本发明实施例中单个工作子进程的工作流程图。
具体实施方式
以下结合附图实施例对本发明作进一步详细描述。
如图1所示的基于Node.js的应用服务器,其中包括Node.js运行应用服务系统,应用数据资源和外部应用服务器;其中Node.js运行应用服务系统包括应用服务器引擎、本地应用容器和外部应用容器;前述应用服务器引擎包括主进程和承载若干工作子进程的子进程容器,每个工作子进程均被授权使用HTTP服务器和应用域管理器;本地应用容器承载了若干本地应用,本地应用容器包含本地应用接口单元和本地应用管理器,本地应用管理器中的本地应用通过本地应用接口单元与应用数据资源连接;外部应用容器承载了若干外部应用,每个外部应用由外部应用接口单元构成,负责与外部应用服务器进行交互;
其中Node.js运行应用服务系统的应用服务器引擎监听用户服务请求,当用户发出服务请求后,按以下流程进行处理:
S101、用户发起服务请求;
S102、应用服务器引擎接受用户服务请求并进行以下处理;
S103、若服务请求内容为本地应用,则进行下一步处理,否则转入步骤S107;
S104、根据用户服务请求中的HTTP地址信息获得应用名称,将服务请求送入本地应用管理器内对应的本地应用;
S105、本地应用管理器对应的本地应用获得服务请求后,通过本地应用接口单元调用应用数据资源进行服务请求处理;
S106、本地应用管理器对应的本地应用完成服务请求处理后,将处理结果反馈至应用服务器引擎;
S107、应用服务器引擎根据用户服务请求中的HTTP地址获得应用名称,将服务请求信号送入外部应用容器内对应的外部应用;
S108、外部应用将服务请求信号通过外部应用接口单元转发至外部应用服务器;
S109、外部应用服务器将处理结果通过外部应用容器反馈至应用服务器引擎;
S110、应用服务器引擎将处理结果反馈至用户,实现用户响应。
应用服务器引擎进行用户服务请求处理依赖于HTTP服务器和应用域管理器,而子进程容器中有若干个工作子进程,每个工作子进程都具有HTTP服务器和应用域管理器的使用权,应用服务器引擎的具体的工作过程包括如下步骤:
S201、应用服务器引擎启动,开始进入工作状态;
S202、应用服务器引擎创建HTTP服务器;
S203、应用服务器引擎创建应用域管理器;
S204、应用服务器引擎读取服务请求的配置文件,获取配置文件中服务请求的工作子进程数量N;
S205、优化参数N:首先判断N是否小于1,如是,将将N赋值为1;如否,将将N赋值为CPU数量;
S206、创建服务进程管理器;
S207、启动主进程;
S208、在子进程容器中启动N个工作子进程并进入S209继续执行,每个工作子进程转入步骤S211进行处理;
S209、主进程监听工作子进程状态并承载应用域管理器,进行应用域管理;
S210、若出现工作子进程i失效,则重启工作子进程i,转入步骤S209;
S211子进程容器内的N个工作子进程启动后,各个工作子进程获得HTTP服务器和应用域管理器的使用权;
S212、子进程容器内的N个工作子进程进入空闲状态,监听HTTP请求;
S213、若用户发起HTTP服务请求则从子进程容器中选取空闲工作子进程j;
S214、工作子进程j完成HTTP服务请求处理并转入步骤S212,转为空闲状态继续监听服务请求。
Node.js运行应用服务系统通过应用域管理器实现用户服务请求的分配与派发,进而实现应用服务器对多个应用的支持功能:应用域管理器负责应用管理,根据用户请求中的地址信息确定该服务请求所归属的应用,从而进行请求消息的分配与派发,再由各自应用分别处理;其中应用服务器引擎的主进程工作流程为:
S301、主进程启动;
S302、主进程启动工作子进程,工作子进程获得应用域管理器;
S303、应用域管理器检索本地应用容器和外部应用容器中的应用;
S304、应用域管理器建立应用列表,将所有应用送入应用列表;
S305、主进程监听工作子进程状态并进行应用域管理;
S306、若发生某一应用程序异常,则转入步骤S309;
S307、若发生工作子进程失效则进入下一步;
S308、主进程重启失效工作子进程;
S309、应用域管理器删除该异常应用,并转入下一步;
S310、若出现新增或删除应用则调整应用列表,并转入步骤S304。
子进程容器内的工作子进程负责将用户服务请求派发到具体的应用,其具体工作流程如下:
S401、工作进程i启动;
S402、工作进程i获得HTTP服务器使用权;
S403、工作进程i获得应用域管理器使用权;
S404、工作进程i进入空闲进程队列,排队等待用户服务请求;
S405、用户发出HTTP请求;
S406、工作进程i出队列,获取用户请求;
S407、工作进程i从HTTP地址中读取用户请求的应用名称;
S408、工作进程i内的应用域管理器将请求送入请求对应的应用;
S409、应用完成请求处理并将结果返回至工作进程i内的HTTP服务器,进而实现用户请求的响应:若该应用为本地应用,则将请求送入本地应用容器,再由本地应用容器进行处理,获取应用数据资源,进而完成用户响应;若该应用为外部应用,则将请求送入外部应用容器,由外部应用容器调取外部应用服务器进行用户请求响应,返回响应结果;
子进程容器内的多个工作子进程能同时相应不同的用户服务请求。