服务器端状态保持机制的软件系统设计与实现_第1页
服务器端状态保持机制的软件系统设计与实现_第2页
服务器端状态保持机制的软件系统设计与实现_第3页
服务器端状态保持机制的软件系统设计与实现_第4页
服务器端状态保持机制的软件系统设计与实现_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、工程硕士学位论文 engineering master dissertation 论文题目 服务器端状态保持机制的软件系统设计与实现 针对遂宁艺龙旅行网的改进 工程领域 软 件 工 程 指导教师 作者姓名 学 号 摘 要 随着 web 时代的到来,在无状态的 http 世界中保持服务器端的状态成为 web 开发者的一个大问题。web 服务器状态保持领域最近出现了几种存储和检索 数据的不同技术。本文先介绍了服务器状态保持的现状,并介绍了 cgi 的基本概 念及提出了基于 cgi 实现的服务器状态保持的目标。后来又介绍了常见的 web 服务器平台的架构,并着重分析了 asp.net 怎样维护或传递

2、服务器端状态。最后 介绍了 lapc/f 架构并针对该架构,采用 cgi 脚本运用 session 机制对服务器状 态保持进行了系统实现。 艺龙旅行网 (nasdaq: long)是中国领先的在线旅行服务提供商之一,为消 费者提供酒店、机票和度假等全方位的旅行产品预订服务,遂宁艺龙旅行网是艺 龙旅行网的重要分站之一。由于遂宁市旅游资源丰富,促使了遂宁旅游业高速发 展,因此服务于旅游业的相关行业也飞速的发展着。遂宁艺龙旅行网是遂宁市最 大的旅游相关资源定购的服务平台,为到遂宁旅游的广大人士提供机票预定、酒 店预定等相关业务。因此遂宁艺龙旅行网的同时在线访问量较大,由此就造成了 服务器经常发生异常

3、而导致服务器状态丢失,从而导致遂宁艺龙在用户心里的满 意度一再下降。 本课题所研究的方向是借助于 visual c+开发平台,运用 cgi 脚本技术,针 对 session 这一种服务器状态保持机制特点,设计了一种比现有的服务器状态保 持机制更优的一种 session 状态保持机制。该机制的成功设计,解决了遂宁市艺 龙旅行网经常由于访问量过大而导致的服务器状态丢失的问题,为遂宁艺龙旅行 网提高客户满意度方面做出了巨大的贡献。 关键词关键词: 服务器状态,cgi, 会话状态,c 语言,艺龙 abstract with the web era, in the world of stateless

4、http to maintain the status of a server- side web developers a big problem. web server status remain several areas of recent store and retrieve data of different technologies. this article first describes the state of the server to maintain the status quo, and introduces the basic concepts of cgi an

5、d cgi- based implementation is proposed to maintain the target server status. later introduced a common framework for web server platform, and analyzed how the asp.net server-side state maintenance or delivery. finally, the lapc / f structure and for the framework, the use of cgi scripts on the serv

6、er status using session mechanism to maintain a systematic implementation. elong (nasdaq: long) is a leading online travel service providers to provide consumers with hotels, air tickets and a full range of travel products and vacation booking service, suining, elong is elongs one of the important s

7、ub-station. as rich in tourism resources in suining, suining prompted the rapid development of tourism, so tourism-related service industries in the rapid development of the. elong suining, suining city is the largest tourism resources ordered service platform, to provide the majority of suining tra

8、vel ticket booking, hotel reservations and other related businesses. therefore suining elong large amount of online access while, which has caused the servers are often caused by abnormal loss of server status, resulting in suining elong satisfaction of the user heart dropped again. the subject of t

9、he research direction is by means of visual c + + development platform, the use of cgi scripting technology for the state to maintain session mechanism that features a server, designed a state to maintain than the existing server as a better mechanism to maintain state session mechanism. successful

10、design of the mechanism to solve the suining city elong often as a result of excessive access to the missing server status issues for suining elong increased customer satisfaction has made a great contribution. keywords: server status, cgi, session state, c language, elong 目 录 第一章第一章 绪论绪论 .1 1 1.1 服

11、务器状态保持机制的选题依据.1 1.2 国内外研究现状.3 1.3 课题研究内容.4 1.3.1 研究内容 .4 1.3.2 研究目标 .4 第二章第二章 系统的理论基础系统的理论基础 .5 5 2.1 c 语言简介 .5 2.1.1 c 语言的定义.5 2.1.2 c 语言的发展历史.5 2.1.3 c 语言的优点.6 2.2 vc+ 介绍.6 2.2.1 vc+6.0 简介.6 2.2.2 mfc 简介.7 2.3 cgi 简介 .8 2.3.1 cgi 的提出.8 2.3.2 cgi 的工作原理.9 2.3.3 cgi 与其他 web 技术的关系.10 2.4 七种常见 web 服务器简

12、介.10 2.4.1 microsoft iis .11 2.4.2 ibm websphere .12 2.4.3 bea weblogic .13 2.4.4 iplanet application server .14 2.4.5 oracle ias .14 2.4.6 apache .15 2.4.7 tomcat .16 2.5 session 技术简介 .17 2.5.1 session 技术介绍.17 2.5.2 session 的功能缺陷.18 第三章第三章 服务器状态保持机制分析服务器状态保持机制分析 .1919 3.1 asp.net 服务器状态保持机制 .19 3.1.

13、1 asp.net 应用程序状态.19 3.1.2 asp.net 会话状态.20 3.1.3 配置文件属性 .22 3.1.4 数据库支持 .23 3.2 weblogic中服务器状态保持方法 .23 3.3 lapc/f 架构分析.24 第四章第四章 服务器状态保持机制的设计服务器状态保持机制的设计 .2626 4.1 系统架构设计.26 4.2 uri 编码方式的设计 .26 4.3 环境变量处理.27 4.4 cookie 机制设计 .28 4.4.1 cookie 的结构.28 4.4.2 cookie 的限制.29 4.5 session 机制设计 .30 4.6 系统详细设计.3

14、1 4.6.1 connector 组件设计.31 4.6.2 container 组件设计.33 4.6.3 host 设计.36 4.7 系统组件间接口设计.37 4.7.1 service 接口设计.37 4.7.2 standardservice 接口设计.38 第五章第五章 服务器状态保持机制的实现服务器状态保持机制的实现 .4040 5.1 cgi 配置文件的实现 .40 5.2 服务器状态监控设置窗口的实现.41 5.2.1 服务器监控设置界面的实现 .41 5.2.2 服务器监控设置界面的代码实现 .42 5.3 服务器状态保持功能的实现.43 5.3.1 服务器状态保持实现步

15、骤 .43 5.3.2 代码实现 .44 5.4 服务器状态加载功能的实现.53 5.4.1 服务器状态加载功能实现方法 .53 5.4.2 实现代码 .54 5.5 系统监控日志功能的实现.55 5.5.1 系统监控日志功能的实现方法 .55 5.5.2 系统监控日志实现代码 .56 第六章第六章 总结与展望总结与展望 .5858 参考文献参考文献 .5959 致致 谢谢 .6161 第一章 绪论 1.1 服务器状态保持机制的选题依据 web 应用程序是无状态的。 每次从服务器请求页时,都会创建网页类的一 个新实例。 这通常意味着在每次往返过程中会丢失该页及其控件中的所有信息。 这意味着它们

16、不自动指示序列中的请求是否全部来自相同的客户端,或者单个浏 览器实例是否一直在查看页或站点。 此外,到服务器的每一往返过程都将销毁 并重新创建页;因此,如果超出了单个页的生命周期,页面信息将不存在。页面 运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤。 这 些步骤包括初始化、实例化控件、还原和维护状态、运行事件处理程序代码以及 进行呈现。了解页生命周期非常重要,因为这样做就能在生命周期的合适阶段编 写代码,以达到预期效果。 为了克服 web 编程的这一固有的局限性,web 页框架包含几种状态管理功 能,可以在往返过程之间将页和控件值保存到 web 服务器。状态保持是对同一 页

17、或不同页的多个请求维护状态和页信息的过程。 cgi 的中文名称是通用网关接口(common gateway interface,cgi)的简称。 它是一种基于 web 服务器与其它外部程序进行通讯的一个接口标准。通过它外 部程序不仅仅可以在服务器上生成文字等静态内容,还可以生成表格、图像、声 音等一些生动的动态内容。 cgi 是工作在服务器上的,它的主要工作原理是:客户端通过传递一些信息 给服务器,服务器获取到这些信息后去启动 cgi 的相关程序来完成的1。cgi 是 架在服务器上的连接客户端与外部执行程序的一道桥梁,它通过系统变量或者文 件将处理后的结果返回给服务器,服务器读取这些内容后再回

18、显给客户端程序, 由此完成一个客户端到服务器端、接着由服务器端到外部执行程序、然后再由外 部执行程序返回结果给服务器、最后由服务器回显结果给客户端的一个完整的交 互过程2。由于 cgi 是工作在服务器上的,所以借助于它的服务器程序就可以读 取 sql 数据库文件,从而使服务器程序具有数据存储与处理的能力。 cgi(common gateway interface: 公用网关接口)规定了 web 服务器调用 其他可执行程序(cgi 程序)的接口协议标准3。web 服务器通过调用 cgi 程序 实现和 web 浏览器的交互,也就是 cgi 程序接受 web 浏览器发送给 web 服务器 的信息,进

19、行处理,将响应结果再回送给 web 服务器及 web 浏览器4。cgi 程序一 般完成 web 网页中表单(form)数据的处理、数据库查询和实现与传统应用系 统的集成等工作。 cgi 程序可以用任何程序设计语言编写,如 shell 脚本语言、 perl、fortran、pascal、c 语言、php、asp、jsp 等,自 cgi 产生以来,c 语言 以其高效性、灵活性和通用性一直是开发交互式 web 应用的最有吸引力的选择5。 虽然用 c 语言编写的 cgi 程序具有执行速度快、安全性高(因为 c 语言程序 是编译执行且不可被修改)等特点,但近年来,能直接内嵌于 html 文档中间的 各种

20、脚本工具,如 php、asp、jsp 等,以其简便性、易用性使一部分用户开始放 弃了直接用 c 语言来开发 cgi 脚本6。 但还有两类用户没有放弃用 c 语言来开发它们的应用:一是对性能追求较高 的高端开发者;二是嵌入式设备的开发人员7。前者选择 c 语言来开发它们的 web 应用,是因为 c 高效性、灵活性和通用性是各种脚本工具无法取代的。后者 选择 c 语言,是因嵌入式设备的特点(内存、cpu 等资源有限等,不可在设备上 运行如 asp,php,perl 等的脚本的运行环境)决定的(另外,目前嵌入式设备 主要以 c 语言开发为主)8。 自 cgi 出现以来,就有人开发方便 c 语言开发的

21、开发库 cgilib,从目前的情 况看 cgilib 并没有得到广泛的应用;而诸如 php、asp、jsp 等各种脚本开发工具, 它们则受到 web 开发者的直接异常青睐9。对比后不难发现,相对于 php、asp、jsp 等脚本工具来说,c 语言缺乏强有力的字符串处理能力,同时基 于 c 语言的 cgilib 对越来越多的交互式 web 应用需求支持不够,如页面模板支 持、session 功能等,让使用者输出 html 文档时非常烦琐,源代码可读性较差, 维护困难,导致开发速度慢,因此在实际应用中应用 c 语言做为 cgi 开发工具的 越来越少。 由于电子商务的运作,客户端状态保持机制 coo

22、kie、服务器端状态保持机制 session 应运而生,被 php、asp、jsp 等各种语言应用在用户认证、安全机制、 购物车等功能上面,而目前各种 c 语言的 cgilib 仅仅支持客户端状态保持机制 cookie,而在服务器端状态保持机制 session 方面还难以见到相关文献和相关的 cgilib10。本课题将在 cgi 的服务器端状态保持机制 session 方面进行探索,扩 展 c 语言的 cgilib 在电子商务上的应用。 艺龙旅行网 (nasdaq: long)是中国领先的在线旅行服务提供商之一,为消 费者提供酒店、机票和度假等全方位的旅行产品预订服务,遂宁艺龙旅行网是艺 龙旅

23、行网的重要分站之一。由于遂宁市旅游资源丰富,促使了遂宁旅游业高速发 展,因此服务于旅游业的相关行业也飞速的发展着。遂宁艺龙旅行网是遂宁市最 大的旅游相关资源定购的服务平台,为到遂宁旅游的广大人士提供机票预定、酒 店预定等相关业务。因此遂宁艺龙旅行网的同时在线访问量较大,由此就造成了 服务器经常发生异常而导致服务器状态丢失,从而导致遂宁艺龙在用户心里的满 意度一再下降。 为了解决遂宁市艺龙旅游网同时在线用户数较多时,而出现的服务器状态丢 失的问题正是本课课题的研究目标。 1.2 国内外研究现状 cgi 函数库的严重缺乏是导致用 cgi 开发 web 应用大量减少重要原因,目前 网上流行的 cgi

24、 函数库主要是国外的 cgilib 和 libcgic,但同出开源的两者都只拥 有少的可怜的参考资料和说明文档,参考资料更是寥寥无几,相比之下 asp、jsp 等 web 开发语言却拥有大量丰富的类库和开发资料。因此 lapc/f 架构组花费数 月时间研究了 cgi 规范和 cgilib、libcgic 函数库,开发出集大成者 icgi 函数库, 拥有使用简单、功能强大、方案完整等诸多特点,还包含独创的 html 模板技术, 使得 cgi(c)开发变得快捷和高效 。 icgi 函数库(/index/index.html)主要包含表单

25、处理函数子库 cgiform、网址解析函数子库 cgiquery、浏览器会话函数子库 cgicookie 三大子库以及其它子库11。表单处理 cgiform 函数子库主要处理浏览 器端表单数据(包含上传文件数据)的读取和分析,实现服务端应用获取浏览器 端表单数据完整解决方案。网址解析 cgiquery 函数子库主要处理浏览器访问网 址的读取和分析,实现服务端应用获取用户访问网址数据处理完整解决方案。浏 览器会话 cgicookie 函数子库主要处理浏览器与服务器交互会话时使用的 cookie 数据的读写,实现服务端应用读写 cookie 数据完整解决方案。cgi 笼统函数子库 cgigener

26、al 封装了对 cgi 环境访问。html 模板子库 cgihtml 完整的实现了 html 模板功能。cgi 流编码库 cgimime 提供了两种主流编码的编码解码功能。 url 解析函数子库 cgiurl 提供了原始的 url 编码解码功能。 国外 cgilib 库主要有 thomas boutell 开发的 cgic 开发包,当前最新版本 是 2.05,cgic 是用来生成基于 cgi 的 web 应用程序的 c 语言函数库,它有以下功 能: 对数据进行语法分析;接收以 get 和 psot 两种方式发送的数据;把 form 中的不同域连接成连续的串;为检索 form 数据而提供字符串,

27、整数,浮点以及单 项和多项选择功能;为数字字段提供边界检测 ;把 cgi 环境变量加载到非空的 c 串中;为调试而捕捉 cgi 状态 ;提供相对安全的系统调用功能12。 国内 cgilib 库主要有 开发的 sky cgi lib ,能够在 fastcgi 模式,或者非 fastcgi 模式下,在 apache 或者 iis 等服务器上稳定地开发和 运行13。sky cgi lib 的函数有六类:内存管理、输入、处理、保存、输出、前 五类函数的支持函数,完成 cookie、表单、文件等 cgi 数据的解析、保存、发 送等功能。 国内、国外的较知名的 c 语言 cgilib 都没有对服务器端状态

28、保持机制 session 功能支持,因此本课题对服务器端状态保持机制 session 功能的支持必然 可以扩大 c 语言的 cgilib 在电子商务上的应用。 1.3 课题研究内容 1.3.1 研究内容 本课题通过分析不同脚本语言对服务器端状态保持机制 session 技术的差别, 基于 c 语言开发代码的灵活性,实现 c 语言 cgilib 的服务器端状态保持机制 session 技术,并与 php、jsp 等脚本语言实现 session 共享,利用服务器端 session 状态保持技术,结合客户端状态保持机制 cookie 技术,极大地提升 cgilib 类库在电子商务应用的便捷性与安全性

29、。 1.3.2 研究目标 通过对不同脚本语言在服务器端状态保持机制 session 技术的特点进行分析, 并分析得出各种服务器状态保持机制的共有性特点, 结合分析结果编写出基于 vc+语言的服务器状态监控器,运用 cgi 脚本与服务器进行交互,针对服务器 session 机制进行优化并加强,从而确保服务器端状态保持机制的完善并保证其 稳定的运行。 第二章 系统的理论基础 2.1 c 语言简介 2.1.1 c 语言的定义 c 语言是 combined language(组合语言)的中英混合简称。是一种林立 于当今各种计算机语言之林的一种程序设计语言14。c 语言是一种完善的程序设 计语言,它即包

30、含汇编语言的初级特性,以兼有高级语言的很多特性。c 语言可 以做为底层语言,编写基于特定操作系统的或硬件的特定的程序;还可以作为应 用程序设计语言,编写不依赖计算机硬件的通用应用程序。c 语言所具这些特性, 使得它的应用领域相当的广泛,不仅仅是在软件开发过程使我们经常见到它的身 影,就连各类科研领域中它的身影也是屡见不鲜。 2.1.2 c 语言的发展历史 c 语言也称为 a 语言,它的原型 algol 60 语言。1972 年,美国贝尔实验 室的 dennis ritchie 在 b 语言的基础上创造了 c 语言。b 语言是美国贝尔实验室 的 ken thompson 于 1970 年,以 b

31、cpl(basic combined programming language,基本组合编程语言)为基础设计出来的15。 c 语言从 1963 年其前身 algol 60 一直到 1994 年的 iso 标准制定的过程中 经历了 30 多年的发展,其中主要的历程如下: 1963 年,剑桥大学将 algol 60 语言发展成为 cpl(combined programming language)语言,标志着 c 语言时代的开始。 1972 年,经美国贝尔实验室的 d.m.ritchie 在 b 语言的基础上最终设计出了 一种新的语言,他取了 bcpl 的第二个字母作为这种语言的名字,这就是 c

32、语言。 1978 年,这一年标志着 c 语言的名称正式形成。美国电话电报公司(atname2=value2;exprires=date;path=path;domiam=domain_ name;secure 现在逐个来解释以上响应头各项的含义,各项内容是用分号隔开的。 name1=value 和 name2=value2 就是你要设置的 cookie 的内容,它是以名字 =值的方式发送的,而 name=value 中不可以有冒号、逗号、和空格,但可以用% xx 代替,xx 为一个 16 进制数; expires=date 项是有关 cookies 的生存期,即该 cookie 的有效期,有效

33、期 的时间格式是格林威治时间格式:wdy,dd-mon-yyyy hh:mm:ss gmt http 应用曾经一直允许三种不同日期/时间格式: sun, 06 nov 1994 08:49:37 gmt; rfc 822, updated by rfc 1123 sunday, 06-nov-94 08:49:37 gmt; rfc 850, obsolete by rfc 1036 sun nov 6 08:49:37 1994; ansi cs as time() format 第一种格式是作为 internet 标准提出来的,它是一个国定长度的,由 rfc 1123(rfc 822 的升

34、级版本)定义的一个子集。第二种格式使用比较普遍,但是 基于废弃的 rfc 850,并且没有年份。如果 http/1.1 客户端和服务器解析日期, 他们必须能接收所有三种格式(为了兼容 http/1.0),但是它们只能产生 rfc 1123 里定义的日期格式来填充头域(header field)用到日期的地方。 这一项在写入 cooie 时是可选的,但不设置的话浏览器与 web 服务器的一次 连接结束后,cookie 就过了有效期;即关闭浏览器后,cookie 失效。 根据 cookie 寿命的长短,可分为 session cookie 和 persistent cookie。 session

35、cookie 即 expires 取系统默认值,使得此 cookie 只是存活于整个 会话过程中,待会话结束即自动删除,存贮位置为客户浏览器内; persistent cookie 则指明 expires 的值,并以文件形式存储在客户端计算 机中。 domain 项定义哪些主机可以读取 cookie,通常 cookie 存放的都不重要的信 息,如果你要存放的的信息不大重要,这一项也不用设置; path 项是定义了一台主机上哪些 web 资源可以读取你所设置的 cookie,如 果 path=/ 则这台主机上所有 web 资源可以读取你所设置的 cookie; secure 是有关加密传送可不用

36、理会 如果在一台支持 cookie 的客户端设置了 cookie,当这个客户端在次来访问 时,浏览器会向 cgi 所在的 web 服务器发送一条 http 响应头,这个响应头为: cookie:name1=value;name2=value2;exprires=date;path=path;domiam=dom ain_name;secure 根据这个 http 响应头 web 服务器的环境变量 http_cookie=:name1=value;name2=value2 对这个环境变量的内容进行分解就可以的到需要的信息。 4.4.2 cookie 的限制 因为 cookie 常常用来存取访问者

37、的重要数据,为了怕被拿来乱用,导致访问者 的数据泄露,所以对 cookie 做出了以下的限制: 每个访问者的浏览器只能存取 300 个 cookie 每个浏览器只能针对某个服务器存取 20 个 cookie 有些浏览器可以把 cookie 的功能关掉,若关掉后 cookie 就不能使用 cookie 是由 web 服务器保存在用户浏览器上的小文本文件,它包含有关用 户的信息。cookie 对于用户来说是透明的。 所以必须严格设计并保护 cookie 不被非法篡改。 其实,网站以外的用户无法跨过网站来获得 cookie 信息。如果因为这种担心 而屏蔽 cookie,肯定会因此拒绝访问许多站点页面

38、。因为,当今有许多 web 站 点开发人员使用 cookie 技术。 4.5 session 机制设计 当程序需要为某个客户端的请求创建一个 session 的时候,服务器首先检查 这个客户端的请求里是否已包含了一个 session 标识 - 称为 session id,如果已包 含一个 session id 则说明以前已经为此客户端创建过 session,服务器就按照 session id 把这个 session 检索出来使用(如果检索不到,可能会新建一个),如 果客户端请求不包含 session id,则为此客户端创建一个 session 并且生成一个与 此 session 相关联的 se

39、ssion id,session id 的值应该是一个既不会重复,又不容 易被找到规律以仿造的字符串,这个 session id 将被在本次响应中返回给客户端 保存。利用 md5 算法生成一个随机的 32 字节的 session_id。会话的 id 是会话的 唯一标识,其是实现状态保持的重要基础。md5 算法是 md4 报文摘要算法的扩 展。 保存这个 session id 的方式可以采用 cookie,这样在交互过程中浏览器可以 自动的按照规则把这个标识发挥给服务器。一般这个 cookie 的名字都是类似于 seeesionid, session 可以在 web 数据库、交互式动态网站、各类

40、基于 web 的管理系统、 电子商务等系统中被使用,根据 session 在系统中应用主要可以分为两大类:一 类是用于身份认证的状态保持;另一类是用于电子商务网站购物车的状态保持。 http 协议采用一次连接和无记忆的方式来进行通讯。一次连接指的是用户 向服务器发送了一个请求。无状态记忆指的就是 web 服务器并不进行事物处理 的记忆,通过 http 协议进行的两次连接之间没有任何关系。也就是说,后续的 连接无法得到有关上次连接的任何信息。 由于 http 协议的无记忆性,使得每个 web 页面相互独立,页面之间缺少 必然的因果关系,可以通过 url 跳过某个页面而直接去访问其它页面,使得基于

41、 web 应用程序数据访问的安全存在很大问题。 会话可以认为是某个用户和服务器之间的一系列相关的交互,这个交互会持 续一段时间。对于单个用户而言,会话过程的开始以用户开始访问某个网站为标 志,会话过程的结束以用户结束对该网站的访问为标志。不同的用户对应着不同 的会话过程,不同的会话过程之间互不干涉,互不影响。 在客户端打开多个浏览器,此时服务器端会因为 session 数量增加而影响性 能。 4.6 系统详细设计 本系统的核心组件分为:connector 和 container。connector 主要负责对 外交流,可以比作为一座对外交流的桥梁,container 是内部的核心业务处理的 容

42、器,主要处理 connector 接受的请求、内部事务等操作。service 服务则将 connector 与 container 连接在一起,共同组成本系统的核心组件,并且对外提 供业务服务。当然要组成这个组件还要很多其它的元素。本系统的系统配置图设 计图见图 4-3 所示。 图 4-3 系统配置图 4.6.1 connector 组件设计 connector 组件是系统中两个核心组件之一,它的主要任务是负责接收浏览 器的发过来的 tcp 连接请求,创建一个 request 和 response 对象分别用于和请 求端交换数据,然后会产生一个线程来处理这个请求并把产生的 request 和

43、response 对象传给处理这个请求的线程,处理这个请求的线程就是 container 组件要做的事了。connector 组件进行请求接收的大体时序图见图 4-4 所示。 图 4-4 connector 组件请求接收时序图 connector 最重要的功能就是接收连接请求然后分配线程让 container 来处 理这个请求,所以这必然是多线程的,多线程的处理是 connector 设计的核心。 tomcat5 将这个过程更加细化,它将 connector 划分成 connector、processor、protocol, 另外 coyote 也定义自己的 request 和 respons

44、e 对象。connector 的主要类图见图 4-5 所示。 图 4-5 connector 相关的主要类图 4.6.2 container 组件设计 当 connector 接受到一个连接请求时,将请求交给 container,container 处理这个请求的时序图见图 4-6 与图 4-7 所示。 图 4-6 engine 和 host 处理请求的时序图 图 4-7 context 和 wrapper 的处理请求时序图 container 是容器的父接口,所有子容器都必须实现这个接口,container 容 器的设计采用典型的责任链的设计模式,它有四个子容器组件构成,分别是: engin

45、e、host、context、wrapper,这四个组件不是平行的,而是父子关系, engine 包含 host,host 包含 context,context 包含 wrapper。通常一个 class 对应一个 wrapper,如果有多个 class 就可以定义多个 wrapper,如果有多个 wrapper 就要定义一个更高的 container 了。container 相关的主要的类图见图 4-8 所示。 图 4-8 container 主要类图 4.6.3 host 设计 host 是 engine 的字容器,一个 host 在 engine 中代表一个虚拟主机,这 个虚拟主机的作用

46、就是运行多个应用,它负责安装和展开这些应用,并且标识这 个应用以便能够区分它们。它的子容器通常是 context,它除了关联子容器外, 还有就是保存一个主机应该有的信息。除了所有容器都继承的 containerbase 外, standardhost 还实现了 deployer 接口。host 组件相关的类关联图见图 4-9 所 示。 图 4-9 host 组件类图 4.7 系统组件间接口设计 4.7.1 service 接口设计 在我们设计的服务器状态监控系统中 connector、container 作为一个整体, connector 主要负责对外交流,container 主要处理 con

47、nector 接受的请求,主要 是处理内部事务 l。service 就是连接这对组成的桥梁,service 将它们连接在一 起,共同为系统提供功能支持。 简单地说,service 只是在 connector 和 container 外面多包一层,把它们组 装在一起,向外面提供服务,一个 service 可以设置多个 connector,但是只能 有一个 container 容器。这个 service 接口的方法定义图见图 4-10 所示。 图 4-10 service 接口设计 4.7.2 standardservice 接口设计 service 接口的标准实现类是 standardservi

48、ce 它不仅实现了 service 借口 同时还实现了 lifecycle 接口,这样它就可以控制它下面的组件的生命周期了。 standardservice 接口图如图 4-11 所示。 图 4-11 standardservice 接口图 第五章 服务器状态保持机制的实现 5.1 cgi 配置文件的实现 cgi 配置文件存放 cgi 程序的初始设置值。在不同操作系统下 cgi 接口也不 相同。根据 cgi 的接口类型来分,可以将 cgi 分为 standard cgi 接口、dos cgi 接口与 win cg i 接口等几种。每种 cgi 接口的描述如下: standard cgi 接口:

49、使用这种接口的 cgi 应用程序主要使用环境变量来实 现与 web 服务器与之间的通信,standard cgi 接口主要应用于 unix 系 统。 dos cgi 接口:它也是使用环境变量来与服务器进行通信的,接口原理类 同于 standard cgi。 win cgi 接口:win cgi 接口主要应用于 windows 操作系统。近年来随 着越来越多的 web 服务器采用 windows 系统,然而 windows 系统又 不能有效地传递环境变量,所以 bob denny 提出了一种新的 windows cgi 标准,这就是 win cgi 接口,并得以不断推广。win cgi 不同于前

50、 面二种接口通过环境变量来与服务器通信,而是采用.ini 文件来与服务器 进行联系的。 在 windows 操作系统下, win cgi 程序与 web 服务器之间也正是通过 ini 类型的配置文件来实现联系的。当 web 客户端通过浏览器将 url 参数传递到 web 服务器后,调用 web 服务器触发 cgi 程序时,web 服务器首先根据调用的 参数类型调用合适的 cgi 处理程序,同时动态生成几个文件存放于临时目录下, 这些文件分为.ini(cgi 初始配置文件)、.inp(cgi 处理输入文件)、.out(cgi 处理输出文件)等文件。在 web 服务器生成 cgi 程序的进程的同时

51、,通过命令 行参数将.ini 配置文件的绝对路径传给 cgi 进程。此时 cgi 处理进程通过读取指 定路径下的.ini 文件中所包含的.inp、.out 等文件路径信息。经过这些步骤后 cgi 程序所需要的初始参数已经收集完成。之后,cgi 程序可读取.ini 和.inp 文件所提 供的信息,读取所有来自 web 服务器端和与 web 客户端端的数据。然后,cgi 程序可以根据客户端传递参数的实际需要调用外部程序,或由 cgi 直接执行外部 程序的功能,并将要传给客户端的信息以 html 文本的形式写在.out 文件上。最 后,web 服务器取.out 文件的 html 文本,将信息传送给

52、web 客户端,并删除 临时目录下的所有文件。到此一个完整的客户端与 cgi 程序进行通信的完整流程 已经完成了。 cgi 的配置文件包含了什么数据呢?其实 cgi 配置文件就是一个普通的 windows .ini 文件,与普通的.ini 文件一样,cgi 配置文件包含了许多 session, 每个 session 又包含一些 key,以下是一个 cgi 配置的部份内容。 cgi /设定服务器处理结果的传递方式,即 html 中的 form method 中的 get,post,head 等。 request method=post /指定服务器的监控的名称与版本 server softwar

53、e=website/1.1e /指定服务器的 ip 地址。 server name=19 /指定服务器监听的端口 server port=80 /服务器管理者的 e-mail 地址,当需要发送邮件时使用默认邮件地址 server admin= /主页的 url 路径。 referer=19/ /指定客户端的网络地址。 remote address=00 system /cgi 处理输出文件的路径名。 output file=c:websitecgi-biniodirprocess.out /cgi 处理输入文件的路径

54、名。 content file=c:websitecgi-biniodirprocess.inp form literal type=b/接收到的 form data 即 client 端动作的结果信息。 5.2 服务器状态监控设置窗口的实现 5.2.1 服务器监控设置界面的实现 服务器端的主要功能是对服务器提供的服务进行实时监控。一旦服务出现问 题,监控程序将采取相应的措施,包括自动重启 web 服务,出现故障按要求执 行一定的命令序列,当机自动重启服务器,实时记录服务日志,每天可定时启动 服务器等。从而可以最大限度地对用户提供 internet 服务,最大限度地提高服务 器数字资源的利用率

55、。 对服务器状态的保持首先要对服务器状态进行监控,对服务器的运行状态进 行系统快照保存,将服务器上运行的 web 服务器的 session 信息进行缓存保存。 当系统发生异常时以便程序可以自动的加载缓存记录,恢复服务器的状态。服务 器状态监控设置窗口界面见图 5-1 所示。 图 5-1 服务器状态监控设置界面 5.2.2 服务器监控设置界面的代码实现 /*开始消息映射*/ begin_message_map(cserverstateholdapp, cwinapp) on_command(id_app_about, assert_valid(pdoc); if (!pdoc) return;

56、5.3 服务器状态保持功能的实现 5.3.1 服务器状态保持实现步骤 监控端可以同时对多台服务器提供的多个服务进行监控,实行多线程管理, 可以在远程任何能访问服务器的地方进行实时监控服务器运行 状况。可以随意 增加、删除、修改需要监控的服务,具有锁定本机桌面、重启 iis 服务、发送 dos 命令、重启服务器、关闭服务器、远程桌面 控制、远程文件传输、网络校 时等功能。如果任何一台服务器出现问题,监控端会连续不断地播放音乐、或用 扬声 器 报警,直至所有服务正常。也可对相应的系统管理员发送邮件,提示故 障信息。 对于客户端的每一次登陆,在服务器生成一个 session,作为一个文件存储在 服务

57、器上,例如在“/tmp”下。文件命名为 sess_开头,在加上一个随机的字符 串,这个字符串称之为 session_id。 在文件中存储的内容包括: 1、用户的最后一次活动时间。(用来检查用户是否长时间没有操作,视为 已经退出登陆)。 2、一个随机的字符串。(用来验证客户端的身份,这个字符串同时作为 cookie 发往客户端)。 3、客户端的 ip. 4、实际要存储的数据。例如用户的 id,密码等。 在用户登陆时,生成这个文件,并且,将那个随机字符串发到客户端的 cookie。在以后的每个页面的超连接,或是 form 中的要跟入 session_id。每个 页面开始后,需要执行的步骤包括: 1

58、、检查是否超时。 2、对比 cookie 中的字符串和 session 文件中的,验证客户身份。 3、对比客户端 ip 和 session 文件中的 ip,验证客户身份。 4、读出数据,供下面程序使用 5、刷新最后活动时间 6、生成新的随机字符串,刷新 session 中对应部分,并将其作为 cookie 发 往客户端。 服务器状态查看界面见图 5-2 所示。 图 5-2 服务器状态查看界面 5.3.2 代码实现 #include #include #include #include #include #include #include #include #define remote_addr

59、1 getenv(remote_addr) #define http_cookie getenv(http_cookie) char *sess_user_name; char *sess_user_pwd; static void print_session_error(char *); static void clean_session_file(); /*set_session()在登陆是调用,启动服务器端状态监控*/ char *set_session(char *name,char *pwd) char str_now11; char hash_key17; char *sessio

60、n_id; time_t now; file *sf; char sfp32; int i,temp,r; time( /*清理服务器端超时 session*/ clean_session_file(); /* * get str_now */ sprintf(str_now,%10d,now); /* * get random hash_key */ srand(now); r = rand(); for(i=0;i16;i+) srand(r); r = rand(); hash_key = r%26 + a; hash_key16 = 0; /* * get more random se

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论