一种应用程序运行的方法及站点接入设备
技术领域
本发明涉及通信技术领域,特别是涉及一种应用程序运行的方法及站点接入设备。
背景技术
随着动态网页asp.net应用越来越广泛,对于部署动态网页asp.net站点首选服务器是互联网信息服务器iis,但iis是开发人员是封闭的,在处理复杂问题存在缺陷且在处理超文本传输协议http请求与管理动态网页asp.net程序不能进行过多的干预。比如,基于服务器iis的动态网页asp.net无法稳定的监听端口,由于服务器iis的应用程序池定时回收机制,虽然可以创建套接字socket通信,当应用程序池时间到达,服务器iis会释放应用程序池所占资源,断开socket连接;或者当服务器iis创建应用程序池时,当报告“端口被占用,无法监听socket端口”异常信息时,服务器iis将无法创建应用程序池。
虽然可以使用.net http协议侦听器httplistener临时替代iis,但使用.netHTTP协议侦听器httplistener的程序需要使用管理员权限,用户体验不佳;.netHTTP协议侦听器httplistener的异步接收请求和发送应答是普通的异步编程模型apm模式(beginxxx,endxxx格式),这种异步模式在频繁调用时会大量产生和销毁异步请求对象lasyncrequest对象,从而增加了gc的压力,而且iasyncrequest对象没有提供自定义池化的接口;httplisenter是.net的包装类,在用户态执行,而http.sys驱动服务是内核态运行,在接受请求,返回应答会进行两次用户态和内核态之间的切换,降低了性能。
亦或使用.net动态网页运行时httpruntime寄宿动态网页asp.net应用程序,而网络中公开资料实行方式只能寄宿单个运行动态网页asp.net应用程序的实例,无法寄宿多个站点。
发明内容
本发明的目的是提供一种应用程序运行方法及站点接入设备,可以解决目前运行应用程序的寄宿体出现问题难以排查且调优空间不大,或应用程序只能寄宿单个实例来运行的问题。
为了解决上述技术问题,本发明的实施例提供一种应用程序运行的方法,其中,所述方法包括:
从网络层接收超文本传输协议http请求报文数据;
根据所述http请求报文数据查找运行动态网页asp.net应用程序的实例;
在查找到所述实例后,驱动所述实例的动态网页asp.net层处理所述http请求报文数据。
进一步地,所述从网络层接收超文本传输协议http请求报文数据的步骤包括:
从网络层接收封装后的http请求报文数据。
进一步地,所述根据所述http请求报文数据查找运行动态网页asp.net应用程序的实例的步骤包括:
分析并查找所述http请求报文数据的请求行数据;
在查找到所述http请求报文数据的请求行数据后,分析所述请求行数据的统一资源定位符url字段数据;
根据所述url字段数据获取请求运行动态网页asp.net应用程序对应的虚拟路径;
根据所述获取到的虚拟路径获取运行所述动态网页asp.net应用程序对应的实例。
进一步地,所述根据所述url字段数据获取请求运行动态网页asp.net应用程序对应的虚拟路径的步骤包括:
获取所述url字段数据的首字符数据,在所述首字符数据指示为目录标识字符数据,且在获取到所述url字段数据中的第二个目录标识字符数据后,则截取所述首字符目录标识数据与所述第二个目录标识字符数据之间的字符数据作为所述请求运行动态网页asp.net应用程序对应的虚拟路径;或者
获取所述url字段数据的首字符数据,在所述首字符数据指示为目录标识字符数据,且在未获取到所述url字段数据中的第二个目录标识字符数据后,则截取所述首字符目录标识数据之后的全部字符数据作为所述请求运行动态网页asp.net应用程序对应的虚拟路径;或者
获取所述url字段数据的首字符数据,在所述首字符数据指示为不是目录标识字符数据,且在获取到所述url字段数据中的第一个目录标识字符数据后,则截取所述首字符数据至所述第一个目录标识字符数据之间的字符数据作为所述请求运行动态网页asp.net应用程序对应的虚拟路径。
进一步地,所述根据所述获取到的虚拟路径获取运行所述动态网页asp.net应用程序对应的实例的步骤包括:
根据所述获取到的虚拟路径在网站存储模块查找与所述虚拟路径对应的运行所述动态网页asp.net应用程序的实例;其中,所述网站存储模块存储有虚拟路径与网站的对应关系;所述虚拟路径以哈希表的键的形式存储于所述网站存储模块中。
进一步地,所述在查找到所述实例后,驱动所述实例的动态网页asp.net层处理所述http请求报文数据的步骤包括:
在查找到所述实例后,驱动所述实例的虚拟主机初始化动态网页请求aspnetworkerrequest,并驱动所述虚拟主机通知所述aspnetworkrequest处理所述http请求报文数据,使得所述aspnetworkerequest分析所述http请求报文数据,并将所述http请求报文数据委托给.net动态网页运行时system.web.httpruntime.processrequest进行处理,使得所述动态网页运行时httpruntime根据所述http请求报文数据驱动所述实例执行所述动态网页asp.net应用程序;其中,所述动态网页请求aspnetworkerrequest为.net动态网页请求system.web.hosting.httpworkerrequest的扩展,并定义了所述实例的动态网页asp.net层处理http请求报文数据的规则。
为了解决上述技术问题,本发明的实施例还提供一种站点接入设备,包括:
接收模块,用于从网络层接收超文本传输协议http请求报文数据;
查找模块,用于根据所述http请求报文数据查找运行动态网页asp.net应用程序的实例;
驱动模块,用于在查找到所述实例后,驱动所述实例的动态网页asp.net层处理所述http请求报文数据。
进一步地,所述接收模块包括:
接收单元,用于从网络层接收封装后的http请求报文数据。
进一步地,所述查找模块包括:
第一分析单元,用于分析并查找所述http请求报文数据的请求行数据;
第二分析单元,用于在查找到所述http请求报文数据的请求行数据后,分析所述请求行数据的统一资源定位符url字段数据;
第一获取单元,用于根据所述url字段数据获取请求运行动态网页asp.net应用程序对应的虚拟路径;
第二获取单元,用于根据所述获取到的虚拟路径获取运行所述动态网页asp.net应用程序对应的实例。
进一步地,所述第一获取单元具体用于获取所述url字段数据的首字符数据,在所述首字符数据指示为目录标识字符数据,且在获取到所述url字段数据中的第二个目录标识字符数据后,则截取所述首字符目录标识数据与所述第二个目录标识字符数据之间的字符数据作为所述请求运行动态网页asp.net应用程序对应的虚拟路径;或者
用于获取所述url字段数据的首字符数据,在所述首字符数据指示为目录标识字符数据,且在未获取到所述url字段数据中的第二个目录标识字符数据后,则截取所述首字符目录标识数据之后的全部字符数据作为所述请求运行动态网页asp.net应用程序对应的虚拟路径;或者
用于获取所述url字段数据的首字符数据,在所述首字符数据指示为不是目录标识字符数据,且在获取到所述url字段数据中的第一个目录标识字符数据后,则截取所述首字符数据至所述第一个目录标识字符数据之间的字符数据作为所述请求运行动态网页asp.net应用程序对应的虚拟路径。
进一步地,所述第二获取单元具体用于根据所述获取到的虚拟路径在网站存储模块查找与所述虚拟路径对应的运行所述动态网页asp.net应用程序的实例;其中,所述网站存储模块存储有虚拟路径与网站的对应关系;所述虚拟路径以哈希表的键的形式存储于所述网站存储模块中。
进一步地,所述驱动模块具体用于在查找到所述实例后,驱动所述实例的虚拟主机初始化动态网页请求aspnetworkerrequest,并驱动所述虚拟主机通知所述aspnetworkrequest处理所述http请求报文数据,使得所述aspnetworkerequest分析所述http请求报文数据,并将所述http请求报文数据委托给.net动态网页运行时system.web.httpruntime.processrequest进行处理,使得所述动态网页运行时httpruntime根据所述http请求报文数据驱动所述实例执行所述动态网页asp.net应用程序;其中,所述动态网页请求aspnetworkerrequest为.net动态网页请求system.web.hosting.httpworkerrequest的扩展,并定义了所述实例的动态网页asp.net层处理http请求报文数据的规则。
本发明的有益效果如下:
本发明的应用程序运行的方法及站点接入设备,采用在服务器iis外寄宿多个实例运行应用程序的方案,克服了当实例寄宿于服务器iis运行应用程序时,由于服务器iis属于不开源产品而导致的出现问题难以排查,调优空间不大的问题;或者使用.net http协议侦听器httplistener代替服务器iis来寄宿实例执行应用程序,但使用.net HTTP协议侦听器httplistener的程序需要管理员权限,用户体验不佳的问题;或者使实例寄宿httpruntime运行应用程序,httpruntime只能寄宿单个站点的问题。采用在服务器iis外寄宿多个实例运行应用程序的方案,使得应用程序得以高效运行。
附图说明
图1表示本发明实施例的应用程序运行方法的流程图;
图2表示本发明实施例的实例的动态网页asp.net层程序的启动处理流程图;
图3表示本发明实施例的虚拟路径的设置流程图;
图4表示本发明实施例的该网络服务器、实例、虚拟主机和站点设置信息之间的包含关系示意图;
图5表示本发明实施例的站点接入层对http请求报文数据的处理流程图;
图6表示本发明实施例的查找要运行动态网页asp.net应用程序的实例的方法流程图;
图7表示本发明实施例的根据url字段数据计算虚拟路径的方法流程图;
图8表示本发明实施例的动态网页asp.net层处理该http请求报文数据的流程图;
图9表示本发明实施例的站点接入设备结构示意图;
图10表示本发明实施例的站点接入设备中查找模块结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明进行详细描述。
IOCP(Input Output Completion Ports,完成端口)模型是迄今为止最为复杂的一种输入/输出I/O模型,若一个应用程序同时需要管理为数众多的套接字socket,那么采用这种模型,往往可以达到最佳的系统性能,完成端口会充分利用Windows内核来进行I/O调度,是通信模型中性能最好的网络通信模型。因此网络通信使用完成端口技术,通过封装完成端口,驱动一次http请求,站点接入层管理动态网页应用程序实例使得单个进程寄宿多个动态网页应用程序实例并高效运行。基于以上,如图1所示,本发明的实施例提供一种应用程序运行的方法,该方法包括:
步骤11,从网络层接收超文本传输协议http请求报文数据;
步骤12,根据所述http请求报文数据查找运行动态网页asp.net应用程序的实例;
步骤13,在查找到所述实例后,驱动所述实例的动态网页asp.net层处理所述http请求报文数据。
下面将结合附图以及具体的实施例对本发明的应用程序运行的方法流程进行详细说明。
网络层监听端口,监听是否有http请求到达,当然在网络层监听端口之前,如图2所示,为实例的动态网页asp.net层程序的启动处理流程:
步骤21,使用指定的端口初始化网络层;
步骤22,设置要启动一个或者多个动态网页asp.net应用程序的虚拟路径、物理路径;
步骤23,网络层开始监听端口。网络层监听到有http请求报文数据达到时,首先使用完成端口技术封装该http请求报文数据,然后通知站点接入层处理该http请求报文数据。
其中,步骤22,设置要启动一个或者多个动态网页asp.net应用程序的虚拟路径、物理路径的步骤,如图3所示,包括如下步骤:
步骤31,创建asp.net应用程序中的应用程序域;
步骤32,创建虚拟主机;
步骤33,创建asp.net应用程序实例,并把运行动态网页asp.net应用程序对应的虚拟路径和运行该动态网页asp.net应用程序的实例的对应关系存储在实例存储模块中;其中,该虚拟路径以哈希表键的形式存储于该实例存储模块中。
其中,如图4所示,为该网络服务器、实例、虚拟主机和应用程序设置信息之间的包含关系,由图中可看出,该网络服务器包括一个或者多个用于运行该动态网页asp.net应用程序的实例;实例中包含虚拟主机、应用程序设置信息;虚拟主机持有动态网页asp.net应用程序的运行环境、应用程序域的引用及应用程序设置信息。
如图5所示,在所述步骤23,网络层开始监听端口。网络层监听到有http请求报文数据达到时,首先使用完成端口技术封装该http请求报文数据,然后通知站点接入层处理该http请求报文数据之后,为站点接入层对http请求报文数据的处理流程:
步骤51,从网络层接收http请求报文数据;
步骤52,查找要运行动态网页asp.net应用程序的实例;
步骤53,驱动实例的虚拟主机处理该http请求报文数据,即驱动实例的动态网页asp.net层处理该http请求报文数据。
其中,如图6所示,步骤52,查找要运行动态网页asp.net应用程序的实例的步骤包括:
步骤61,分析该http请求报文数据并查找该http请求报文数据的请求行;
步骤62,分析该http请求报文数据中请求行的统一资源定位符url字段数据;
步骤63,根据该url字段数据计算该http请求报文数据请求运行的动态网页asp.net应用程序对应的虚拟路径;
步骤64,根据计算出来的虚拟路径计算出要运行动态网页asp.net应用程序的对应实例。
其中,如图7所示,所述步骤63,根据该url字段数据计算该http请求报文数据请求运行的动态网页asp.net应用程序对应的虚拟路径的步骤包括:
步骤71,获取所述url字段数据的首字符数据,在所述首字符数据指示为目录标识“/”字符数据,且在获取到所述url字段数据中的第二个目录标识“/”字符数据后,则截取所述首字符目录标识“/”数据与所述第二个目录标识“/”字符数据之间的字符数据作为所述请求运行动态网页asp.net应用程序对应的虚拟路径;或者
步骤72,获取所述url字段数据的首字符数据,在所述首字符数据指示为目录标识“/”字符数据,且在未获取到所述url字段数据中的第二个目录标识“/”字符数据后,则截取所述首字符目录标识“/”数据之后的全部字符数据作为所述请求运行动态网页asp.net应用程序对应的虚拟路径;或者
步骤73,获取所述url字段数据的首字符数据,在所述首字符数据指示为不是目录标识“/”字符数据,且在获取到所述url字段数据中的第一个目录标识“/”字符数据后,则截取所述首字符数据至所述第一个目录标识“/”字符数据之间的字符数据作为所述请求运行动态网页asp.net应用程序对应的虚拟路径。
如图8所示,在所述步骤53,驱动实例的虚拟主机处理该http请求报文数据,即驱动实例的动态网页asp.net层处理该http请求报文数据之后为动态网页asp.net层处理该http请求报文数据的流程:
步骤81,驱动虚拟主机初始化动态网页请求aspnetworkerrequest,动态网页请求aspnetworkerrequest为.net动态网页请求system.web.hosting.httpworkerrequest的扩展,并定义了所述实例的动态网页asp.net层处理http请求报文数据的规则,是动态网页运行时httpruntime驱动动态网页asp.net应用程序的依赖项;
步骤82,驱动虚拟主机通知aspnetworkrequest处理所述http请求报文数据,使得所述aspnetworkerequest分析所述http请求报文数据,并将所述http请求报文数据委托给.net动态网页运行时system.web.httpruntime.processrequest进行处理,使得所述动态网页运行时httpruntime根据所述http请求报文数据驱动所述实例执行所述动态网页asp.net应用程序。
本发明的应用程序运行的方法,采用在服务器iis外寄宿多个实例运行应用程序的方案,克服了当实例寄宿于服务器iis运行应用程序时,由于服务器iis属于不开源产品而导致的出现问题难以排查,调优空间不大的问题;或者使用.net http协议侦听器httplistener代替服务器iis来寄宿实例执行应用程序,但使用.net http协议侦听器httplistener的程序需要管理员权限,用户体验不佳的问题;或者使实例寄宿httpruntime运行应用程序,httpruntime只能寄宿单个站点的问题。采用在服务器iis外寄宿多个实例运行应用程序的方案,使得应用程序得以高效运行。
如图9所示,本发明的实施例还提供一种站点接入设备,其中,该站点接入设备包括:
接收模块91,用于从网络层接收超文本传输协议http请求报文数据;
查找模块92,用于根据所述http请求报文数据查找运行动态网页asp.net应用程序的实例;
驱动模块93,用于在查找到所述实例后,驱动所述实例的动态网页asp.net层处理所述http请求报文数据。
其中,该接收模块91包括:接收单元,用于从网络层接收封装后的http请求报文数据。
其中,如图10所示,所述查找模块92包括:
第一分析单元101,用于分析并查找所述http请求报文数据的请求行数据;
第二分析单元102,用于在查找到所述http请求报文数据的请求行数据后,分析所述请求行数据的统一资源定位符url字段数据;
第一获取单元103,用于根据所述url字段数据获取请求运行动态网页asp.net应用程序对应的虚拟路径;
第二获取单元104,用于根据所述获取到的虚拟路径获取运行所述动态网页asp.net应用程序对应的实例。
其中,所述第一获取单元103具体用于获取所述url字段数据的首字符数据,在所述首字符数据指示为目录标识字符数据,且在获取到所述url字段数据中的第二个目录标识字符数据后,则截取所述首字符目录标识数据与所述第二个目录标识字符数据之间的字符数据作为所述请求运行动态网页asp.net应用程序对应的虚拟路径;或者
用于获取所述url字段数据的首字符数据,在所述首字符数据指示为目录标识字符数据,且在未获取到所述url字段数据中的第二个目录标识字符数据后,则截取所述首字符目录标识数据之后的全部字符数据作为所述请求运行动态网页asp.net应用程序对应的虚拟路径;或者
用于获取所述url字段数据的首字符数据,在所述首字符数据指示为不是目录标识字符数据,且在获取到所述url字段数据中的第一个目录标识字符数据后,则截取所述首字符数据至所述第一个目录标识字符数据之间的字符数据作为所述请求运行动态网页asp.net应用程序对应的虚拟路径。
其中,所述第二获取单元104具体用于根据所述获取到的虚拟路径在网站存储模块查找与所述虚拟路径对应的运行所述动态网页asp.net应用程序的实例;其中,所述网站存储模块存储有虚拟路径与实例的对应关系;所述虚拟路径以哈希表的键的形式存储于所述网站存储模块中。
其中,所述驱动模块93具体用于,在查找到所述实例后,驱动所述实例的虚拟主机初始化动态网页请求aspnetworkerrequest,并驱动所述虚拟主机通知所述aspnetworkrequest处理所述http请求报文数据,使得所述aspnetworkerequest分析所述http请求报文数据,并将所述http请求报文数据委托给.net动态网页运行时system.web.httpruntime.processrequest进行处理,使得所述动态网页运行时httpruntime根据所述http请求报文数据驱动所述实例执行所述动态网页asp.net应用程序;其中,所述动态网页请求aspnetworkerrequest为.net动态网页请求system.web.hosting.httpworkerrequest的扩展,并定义了所述实例的动态网页asp.net层处理http请求报文数据的规则。
需要说明的是,该站点接入设备是与上述方法实施例对应的站点接入设备,上述方法实施例中所有实现方式均适用于该站点接入设备的实施例中,也能达到相同的技术效果。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。