基于java的高效兼容http服务器的研究及实现内容摘要:

套接字类)提供的重要函数有 getIAddress( ), getPort( ), getInputStream( ), 和 close( )。 分别产生用于获得信宿机的地址、信宿机端口号、获得输入流、获得输出流、关闭套接字。 ServerSocket 类(服务器套接字类)的重要函数有:getIAddress( ), getLocalPort( ), accept( )和 close( ),分别用于获得信宿机的 Inter 地址、本地端口、监听和关闭套接字。 ServerSocket 类实现了 TCP 服务器插口。 它提供两种构造函数指定服务器插口所用的端口,以便监听到连接请求。 利用 Accept( )方法引发服务器插口监听并等待,一旦连接就返回一个实例。 自定义类包括( 1) HttpServer 类(服务器类),( 2) ReThead(线程重用类),( 3) HttpProcess(一个接口类)。 此外还包括各个类的请求处理 类 3个: HttpFile(静态文件处理) , HttpCGI( CGI处理) ,HttpException(出错处理);以及数据流处理 2 个:HttpInputstream(数据输入流)和 HttpOutputstream(数据输出流)。 9 HTTP Request Http 服务器 初始化 HTTPConfig 初始化 HTTPLog 初始化 HTTPConverter 当浏览器 连接时建立 浏览器 连接 分析器 建立连 接信息 HTTPMessageHeaders HTTPInfo 发回 响应和 对象 HTTPGetHand HTTPHead HTTPHandler 建立 HTTPResponse 生成请求的对象 HTTPFileObject HTTPProcessObject 建立相应处理器 图七 重要类的交互 10 (二)﹑ 服务器总体设计 1﹑总体设计的关键点 根据 HTTP 工作原理,在这个设计中抓住了几个关键点:( 1)持续监听。 根据 TCP/IP,作为 服务器端进行监听。 在这个设计中,采用了一个永真的循环,等待客户的连接请求。 ( 2)可以同时接受多个用户的连接请求。 每个用户拥有自己独立的线程。 ( 3)实现了线程的重用性。 线程重用服务可以自动收集可重用的线程,以免过的的创建与销毁线程增加系统的负担,提高了系统的效率。 2﹑模块设计 把 Http 服务器分成两个组成模块:客户请求处理模块和响应生成发送模块,其中客户请求处理模块负责接收客户的连接,分析请求中的各个协议参数,此外还负责调用响应生成发送模块。 而响应生成发送模块的任务就是根据对客户请求的分析的结果查找资源,生 成响应和发送响应。 ( 1)﹑客户请求处理模块的任务就是负责监听系统的端口,以获取客户机到达本机的连接。 当获得一个连接请求时,就把这一连接所建立的套接字连接交给一个负责客户请求处理程序 —— Client 类处理这一个客户的请求,之后程序继续监听等待下一个客户的连接。 在一个Client 对象建立之后,它就把其在初始化时获得的一个 Socket 对象的输入流重定向给一个 Request 对象,使其能通过 Request 类提供的接口方法获取这一用户请求的相关参数,如 URL 的组成请求方法,所指文件以及协议版本等数据。 然后把这一个 Request 对象连同 Socket 对象的输 出 流 传 递 给 一 个 ResourceHandler 类 的 实 例 , 由 这 一 个ResourceHandler 对象完成生产发送对用户请求的响应。 主要由三个部分组成:①守护程序:一个 HttpServer 类的实例对象;②客户处理程 11 6 5 4 3 2 1 总 控程序 守护程序 客户处理程序 请求分析程序 序:一个 Client 用户类,由 HttpServer 对象负责建立其实例和执行其运行线程;③请求分析程序:一个 Request 用户类,由 Client 对象初始化其对象实例,用于分析客户请求中的协议参数(如下 图八 )。 其中,1—— 调用; 2—— Socket 对象; 3—— Socket 对象; 4—— Socket 对象输入流; 5—— Request 对象; 6—— Socket 对象的输入流和 Request 对象。 Request 对象是指经分析的客户请求。 图八 请求处理模块 ( 2)﹑响应生成发送模块实现的功能就是从客户请求程序中接受一个 Request 对象和一个标识一个用户连接的客户 Socket 对象的输入流( HttpInputStream)对象。 通过 Request 对象中获得客户请求的协议参数,查找客户请求指定的资源,根据查找的结果,生成相应的响应,并把生成的响应写入到指定的 HttpInputStream 对象中,其操作结果就是把响应送往客户。 包含了以下对象: ResourceHandler 对象(响应产生发送处理)、 SCManager(响应的状态码管理)对象、 StatusCode 对象(状态码管理)、 MimeType 对象(媒体类型描述处理),通过相互调用协调,共同完成模块的功能(如图六)。 其中: 1—— Socket 对象的输入流和 Request 对象; 2—— 文件名; 3—— 文件描述; 4—— 状态码; 5——响应生成模块 12 6 5 4 3 2 1 响应生成发送 程序 状态码管理 程序 媒体类型识别程序 文件系统 7 状态码相关描述; 6—— 文件名; 7—— 媒体类型描述。 图九 响应生成发送模块 3﹑ HTTP 服务器各类之间关系 在 Http 服务器的设计中, Httpserver 是主类,提供了程序的入口,打开 ServerSocket 类,并且接受客户端的连接。 对于每个连接将创建一个新的 Httpserver 对象去处理客户端的请求,并且启动一个新的线程去执行该处理。 HttpInputstream 类对于请求信息进行分析。 HttpProcessor 类则提供了真正处理的接口,它分别被 HttpFile 类,HttpCGI 类, HttpException 类 来 实 现。 最 后 将 响 应 信 息 由HttpOutputStr。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。