码迷,mamicode.com
首页 > Web开发 > 详细

Tomcat架构解析(四)-----Coyote、HTTP、AJP、HTTP2等协议

时间:2019-03-31 23:22:11      阅读:377      评论:0      收藏:0      [点我收藏+]

标签:配置   设计   服务器   部分   应用服务器   解耦   统一   不能   构造   

  Connector是Tomcat中非常重要的一个组成部分,说白了,就是如何从客户端获取到相应的请求信息。这部分主要包括的难点有这样几个部分:

  1、客户端与服务端的协议

  客户端与服务端的协议是多种多样的,Tomcat肯定不能仅仅支持HTTP协议

  2、数据I/O方式

  I/O通常有NIO、BIO等多种方式,如何提高数据传输的效率?

 

  一、Coyote

  1、Coyote简介

  Tomcat中的Connector就是Coyote,功能主要是封装了底层的网络通信。为Catalina容器提供了统一的接口,使容器与具体的协议以及I/O解耦。如图:

  技术图片

  注:Catalina就是Tomcat中servlet容器实现。

  

  2、Tomcat支持的协议与I/O方式

  HTTP/1.1、AJP协议(用于和一些web服务器集成,如nginx等等)、HTTP/2.0

  BIO(8.0版本后就不用了,毕竟慢)、NIO、NIO2、APR

  协议和I/O方式分别是用于应用层以及传输层,如下图所示:

  技术图片

 

  二、web请求处理

 1、Connector设计

技术图片

  endpoint:Tomcat中提供了AbstractEndpoint抽象类,用于监听客户端的请求,收取客户端的socket,并且根据不同的I/O方式提供了NioEndpoint、AprEndpoint、Nio2Endpoint。

  processor:Coyete协议处理接口,负责构造request以及response对象,并通过adapter提交到catalina容器。主要包括HTTP11Processor、AjpProcessor、StreamProcessor(HTTP/2.0)

  protocolHandler:封装了endpoint以及processor

  upgradeProtocol:表示HTTP升级协议,根据请求创建一个用于升级处理的令牌upgradeToken  

 

  2、请求处理过程

  技术图片

    上图是Tomcat8.5版本前的处理过程,在8.5之后,由于增加了upgradeProtocol支持HTTP升级协议处理,过程变成下图:

   技术图片

   过程解释:

  技术图片

  技术图片

  技术图片

 

  三、Tomcat支持的相关协议

  1、HTTP

  技术图片

  a、请求信息示例:

  技术图片

  技术图片

  技术图片

  b、响应信息示例:

  技术图片

  技术图片

  在Tomcat中,相关配置可以在server.xml中查看,例如:

  技术图片

  

  2、AJP

  一般在应用服务器(Tomcat、JBoss等等)的前端布置web服务器(apache server、nginx等等)。目的有如下:

  a、可以做负载均衡,将请求合理的分配到应用服务器上;

  b、静态资源优化,web服务器在静态资源处理上有性能优势。

  那这样布置的话也会产生问题,web服务器与应用服务器之间需要通过TCP建立连接,那这样的话就需要建立很多的socket连接,并且连接也是无状态,都是短连接,效率非常低。所以需要减少socket的创建,并且尽量保证持久的TCP连接。

  AJP协议就是为了解决这两个问题产生的,基于二进制传输,并且目前主流的web服务器都支持AJP协议。

 技术图片

  请求消息格式与响应消息格式:

  技术图片

  技术图片

  技术图片

  

  3、HTTP/2.0

  技术图片

  技术图片

  技术图片

  

  由于协议这块对应的内容非常之多,所以通过以下两个图简单对比下HTTP/1.1与HTTP/2.0,如下:

  技术图片

  技术图片

 

Tomcat架构解析(四)-----Coyote、HTTP、AJP、HTTP2等协议

标签:配置   设计   服务器   部分   应用服务器   解耦   统一   不能   构造   

原文地址:https://www.cnblogs.com/alimayun/p/10633872.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!