论文部分内容阅读
摘要:容器的大小和复杂度,都会影响对用户请求的响应速度,因此对云计算来说,Web容器要满足其需求,势必要特殊定制,才能使容器完全适合云计算的需求。以往的Web容器早在云计算之前就已经存在和发展,在设计之初并没有考虑云计算的问题。本论文主要阐述轻量级Web容器的设计要点。
关键词:轻量级web容器 设计 Connector Handler Server Thread Pool
1、系统架构设计
轻量级web容器的整体架构主要包含Connector、Server、Handler和Thread Pool。其中Connector连接器负责连接客户端发起的HTTP connections;Handler处理器接受处理来自HTTP connections的请求,并对其进行内容响应;Thread Pool线程池管理和调度多个线程,用来服务与HTTP connections和Handler的运行。Connector、Handler、Thread Pool分别对应3个非常简单的接口,并各自拥有多个不同的实现类。在不同应用场合下,可以使用选择不同Connector实现类以满足需求。可以指定不同Thread Pool实现类,甚至可以自己实现一个线程池。可以组合多个不同用途的Handler实现来灵活配置服务器的功能。
2、 Connector连接器设计
Connector基本分为两大类别NIO类和BIO类。当Connector接收到一个请求(一般是来自Socket)后,产生一个新的HTTP Connection对象,然后由Server对象调用Handler来处理HTTP Connection对象。HTTP Connection类就是解析HTTP协议的地方,并提供附属的Request对象和Response对象,Handler就是通过这两个对象处理输入和输出的。
Connector和Connection是紧密相关的,如果一个Connector要识别特定的协议,那么就必须对应一个Connection实现。自Connector接收到一个请求的时刻起,Connector就需要从Thread Pool提取一个线程来处理这个连接,这样才能实现服务器同时处理多个请求。
3、Handler处理器设计
Handler在Web容器里面对应着一个接口,这个核心接口方法为是:
public void handle(String target, HttpServletRequest request,
HttpServletResponse response, int dispatch)
throws IOException, ServletException;
参数target是指客户端请求的地址。request和response的类型分别是来自Servlet规范里面的HttpServletRequest和HttpServletResponse接口,HttpConnection引用的Request和Response类分别就是这两个接口的实现。Handle方法的参数列表和Servlet的service方法非常相似。
Handler分为三类:内容输出Handler,根据target输出内容(如:ResourceHandler、ServletHandler、DefaultHandler等),这些类都是直接对Handler接口进行实现;装饰模式Handler,可以选择在交给另外一个Handler对象调用前或后来处理Request和Response,这些类都继承自 HandlerWrapper类,Server类也是一个装饰模式Handler,其实在Server代理了所有其他的 Handler,是所有Handler的入口,HandlerWrapper中的setHandler方法便是用来设定被代理Handler对象的,另外装饰器模式还运行将多个Handler串联起来使用;集合类Handler,将请求分发给其他Handler处理,分发策略由各自实现类决定,常用集合类Handler有HandlerCollection、HandlerList和ContextHandlerCollection。
Handler的设计通常与对象缓存技术有关,OSCACHE和JCS是两个应用较为广泛的缓存框架,轻量级Web容器的Handler实现利用了JCS缓存框架的基本原理。
4、Server和Thread Pool线程池设计
要让Web容器工作起来,首先初始化一个Server对象实例,然后给它注册一个或多个Connector对象实例、注册一个Thread Pool对象、注册多个Handler对象并让这些Handler组合起来。这样一个Web容器服务器便组装完成。
Web容器的一个处理请求的过程如下:首先Connector收到一个请求,Connector根据HTTP/1.1协议将请求包装成为Handler所认识的Request和Response对象,然后用Server提供的Thread Pool对象来分配一个线程去执行Handler调用,注意Server对象算是一个Handler对象,所以从Server开始去交给其他Handler对象处理。
关于Thread Pool,Web容器提供两个实现版本:Thread Pool和QueuedThreadPool,当J2SE是1.5以上版本可以选择Thread Pool的实现。Thread Pool存在的目的是因为线程的创建是非常昂贵的操作,所以使用Pool技术以便重复使用以创建的线程。Thread Pool的大致工作方式是:如果存在一个空闲线程,则让它去执行请求处理。如果不存在且没有达到设定的最大线程数,那么就新建一个 Thread去执行请求处理。如果已经达到最大线程数,那么就将工作任务放到队列里面排队,等到有空闲线程时再执行任务。
参考文献
[1]施伟;张忠能;;轻量级容器的设计与应用[J];计算机工程;2006年20期
关键词:轻量级web容器 设计 Connector Handler Server Thread Pool
1、系统架构设计
轻量级web容器的整体架构主要包含Connector、Server、Handler和Thread Pool。其中Connector连接器负责连接客户端发起的HTTP connections;Handler处理器接受处理来自HTTP connections的请求,并对其进行内容响应;Thread Pool线程池管理和调度多个线程,用来服务与HTTP connections和Handler的运行。Connector、Handler、Thread Pool分别对应3个非常简单的接口,并各自拥有多个不同的实现类。在不同应用场合下,可以使用选择不同Connector实现类以满足需求。可以指定不同Thread Pool实现类,甚至可以自己实现一个线程池。可以组合多个不同用途的Handler实现来灵活配置服务器的功能。
2、 Connector连接器设计
Connector基本分为两大类别NIO类和BIO类。当Connector接收到一个请求(一般是来自Socket)后,产生一个新的HTTP Connection对象,然后由Server对象调用Handler来处理HTTP Connection对象。HTTP Connection类就是解析HTTP协议的地方,并提供附属的Request对象和Response对象,Handler就是通过这两个对象处理输入和输出的。
Connector和Connection是紧密相关的,如果一个Connector要识别特定的协议,那么就必须对应一个Connection实现。自Connector接收到一个请求的时刻起,Connector就需要从Thread Pool提取一个线程来处理这个连接,这样才能实现服务器同时处理多个请求。
3、Handler处理器设计
Handler在Web容器里面对应着一个接口,这个核心接口方法为是:
public void handle(String target, HttpServletRequest request,
HttpServletResponse response, int dispatch)
throws IOException, ServletException;
参数target是指客户端请求的地址。request和response的类型分别是来自Servlet规范里面的HttpServletRequest和HttpServletResponse接口,HttpConnection引用的Request和Response类分别就是这两个接口的实现。Handle方法的参数列表和Servlet的service方法非常相似。
Handler分为三类:内容输出Handler,根据target输出内容(如:ResourceHandler、ServletHandler、DefaultHandler等),这些类都是直接对Handler接口进行实现;装饰模式Handler,可以选择在交给另外一个Handler对象调用前或后来处理Request和Response,这些类都继承自 HandlerWrapper类,Server类也是一个装饰模式Handler,其实在Server代理了所有其他的 Handler,是所有Handler的入口,HandlerWrapper中的setHandler方法便是用来设定被代理Handler对象的,另外装饰器模式还运行将多个Handler串联起来使用;集合类Handler,将请求分发给其他Handler处理,分发策略由各自实现类决定,常用集合类Handler有HandlerCollection、HandlerList和ContextHandlerCollection。
Handler的设计通常与对象缓存技术有关,OSCACHE和JCS是两个应用较为广泛的缓存框架,轻量级Web容器的Handler实现利用了JCS缓存框架的基本原理。
4、Server和Thread Pool线程池设计
要让Web容器工作起来,首先初始化一个Server对象实例,然后给它注册一个或多个Connector对象实例、注册一个Thread Pool对象、注册多个Handler对象并让这些Handler组合起来。这样一个Web容器服务器便组装完成。
Web容器的一个处理请求的过程如下:首先Connector收到一个请求,Connector根据HTTP/1.1协议将请求包装成为Handler所认识的Request和Response对象,然后用Server提供的Thread Pool对象来分配一个线程去执行Handler调用,注意Server对象算是一个Handler对象,所以从Server开始去交给其他Handler对象处理。
关于Thread Pool,Web容器提供两个实现版本:Thread Pool和QueuedThreadPool,当J2SE是1.5以上版本可以选择Thread Pool的实现。Thread Pool存在的目的是因为线程的创建是非常昂贵的操作,所以使用Pool技术以便重复使用以创建的线程。Thread Pool的大致工作方式是:如果存在一个空闲线程,则让它去执行请求处理。如果不存在且没有达到设定的最大线程数,那么就新建一个 Thread去执行请求处理。如果已经达到最大线程数,那么就将工作任务放到队列里面排队,等到有空闲线程时再执行任务。
参考文献
[1]施伟;张忠能;;轻量级容器的设计与应用[J];计算机工程;2006年20期