如何设计一个可用的web容器

作者:武汉味美食家餐饮管理有限公司 来源:www.cj17917.com 发布时间:2017-09-12 16:35:16
如何设计一个可用的web容器

开发一个web容器涉及很多不同方面不同层面的技术,例如通信层的知识,程序语言层面的知识等等,且一个可用的web容器是一个比较庞大的系统,要说清楚需要很长的篇幅,本文旨在介绍如何设计一个web容器,只探讨实现的思路,并不涉及过多的具体实现。把它分解划分成若干模块和组件,每个组件模块负责不同的功能,下图列出一些基本的组件,并将对每个组件进行介绍。

web容器,设计,JSP

连接接收器


主要的职责就是监听是否有客户端套接字连接并接收socket,再将socket交由任务执行器(线程池)执行。不断从系统底层读取socket,做尽可能少的处理,再扔进线程池。为什么强调要做尽可能少的处理?这里关系到系统性能问题,过多的处理会严重影响吞吐量。因为一般只有一个接收器(一条线程负责套接字接收工作),所以它对每次接收处理的时间长短将很可能对整体性能产生影响。于是接收器所干的活都是非常少且简单的,仅仅维护了几个状态变量、流量控制闸门的累加操作、serverSocket的接收操作、设置接收到的socket的一些属性、将接收到的socket放入线程池以及一些异常处理。其他需要较长时间处理的逻辑就交给了线程池,例如对socket底层数据的读取,对http协议报文的解析及响应客户端的一些操作等等。

web容器,设计,JSP


连接数控制器


对于一台机器而言,访问请求的总流量有高峰期且服务器有物理极限,为了保证web服务器不被冲垮我们需要采取一些措施进行保护预防,需要稍微说明的此处的流量更多的是指套接字的连接数,通过控制套接字连接个数来控制流量。其中一种有效的方法就是采取流量控制,它就像在流量的入口增加了一道闸门,闸门的大小决定了流量的大小,一旦达到最大流量将关闭闸门停止接收直到有空闲通道。计数器可用JDK的AQS框架实现。

web容器,设计,JSP


套接字工厂


不同的使用场合可能需要不同的安全级别,例如在支付相关的交易就必须对信息加密后再发送,这其中还涉及到密钥协商的过程,而在另外一些普通场合则无需对报文加密。反应到应用层则是使用http与https的问题。
简单讲TLSSSL协议给每次通信①提供认证服务,认证本次会话实体身份的合法性。②提供加密服务,强加密机制能保证通信过程中的消息不会被破译。③提供防篡改服务,利用Hash算法对消息进行签名,通过验证签名保证通信内容不被篡改。
http协议对应Socket,而https则对应SSLSocket。如何生成Socket及SSLSocket则交由套接字工厂。

web容器,设计,JSP


任务定义器——Task


定义需要执行的任务,告诉线程池要执行什么样的任务。任务主要分为三点:处理socket并响应客户端、连接数计数器减一、关闭socket。其中对socket的处理是最重要也是最复杂的,它包括对底层socket字节流的读取、http协议请求报文的解析(请求行、请求头、请求体等信息的解析)、根据请求行解析得到路径去寻找相应主机上web项目的资源、根据处理的结果组装好http协议响应报文输出到客户端。

web容器,设计,JSP


任务执行器


一个拥有最大最小线程数限制的线程池,之所以称之为“任务执行器”是因为线程池可以看做是启动了若干线程不断检测某个任务队列,一旦发现有需要执行的任务则执行。最大最小线程数限制、多余线程回收时间限制、超出最大线程数时线程池做出的拒绝动作等等。

web容器,设计,JSP


报文读取


用于向操作系统底层读取来自客户端的报文并提供缓冲机制。报文复制到desBuf。

web容器,设计,JSP


报文输出


用于向操作系统底层写入由web容器处理后的报文并提供缓冲机制。将报文outputBuf通过缓冲区写入到操作系统。

web容器,设计,JSP


输入过滤器


在这个读取的过程中希望做一些额外的处理,并且这些额外处理可能是根据不同条件做不同的处理,考虑到程序解耦与扩展,于是引入过滤器。通过一层层的过滤器完成过滤操作后才能到desBuf,这个过程就像被加入了一道道处理关卡,经过关卡都会被执行相应操作,最终完成源数据到目的数据的操作。

web容器,设计,JSP


输出过滤器


与输入过滤器功能类似,用于在报文输出的时候。

web容器,设计,JSP


报文解析器


提供解析http协议各个部分的能力。

web容器,设计,JSP


请求生成器


按照面向对象的思想,把每个请求过程中与请求相关的属性及协议字段等抽象成一个Request对象。包括请求行、请求头、请求体三部分信息,在处理过程中需要什么值可直接从request对象中获取。为实现servlet标准提供方便。


web容器,设计,JSP


响应生成器


与请求相对应,需要一个响应对象生成器。包括响应行、响应头、响应体三部分信息,在处理结果相关值可直接设置到response对象中。为实现servlet标准提供方便。

web容器,设计,JSP


地址映射器


地址映射器是请求与各个web项目、各个资源的路由器。一个请求的访问根据路径被映射找到响应的资源输出给请求客户端。

web容器,设计,JSP


生命周期

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉网站建设公司 https://www.feimao666.com

  • 上一篇:怎样做APP?简单是趋势 但简过头就离谱了
  • 下一篇:最后一页
  • 
    COPYRIGHT © 2015 武汉味美食家餐饮管理有限公司 ALL RIGHTS RESERVED.
    本站所有原创信息,未经许可请勿任意转载或复制使用 网站地图 技术支持:肥猫科技
    精彩专题:网站建设
    购买本站友情链接、项目合作请联系客服QQ:2500-38-100