• tomcat的Connector和三种运行模式


    一、Connector

    在Tomcat架构中,Connector主要负责处理与客户端的通信。Connector的实例用于监听端口,接受来自客户端的请求并将请求转交给Engine处理。同时将来自Engine的答复返回给客户端。

    Connector的种类

    Tomcat源码中与connector相关的类位于org.apache.coyote包中,Connector分为以下几类:

    Http Connector, 基于HTTP协议,负责建立HTTP连接。它又分为BIO Http Connector与NIO Http Connector两种,后者提供非阻塞IO与长连接Comet支持。
    默认情况下,Tomcat使用的就是这个Connector。
    
    
    AJP Connector, 基于AJP协议,AJP是专门设计用来为tomcat与http服务器之间通信专门定制的协议,能提供较高的通信速度和效率。
    如与Apache服务器集成时,采用这个协议。
    
    
    APR HTTP Connector, 用C实现,通过JNI调用的。主要提升对静态资源(如HTML、图片、CSS、JS等)的访问性能。现在这个库已独立出来可用在任何项目中。
    Tomcat在配置APR之后性能非常强劲。

    tomcat中实现了以下几种Connector:

    #以上三种Connector实现都是直接处理来自客户端Http请求
    org.apache.coyote.http11.Http11Protocol : 支持HTTP/1.1 协议的连接器。
    
    org.apache.coyote.http11.Http11NioProtocol : 支持HTTP/1.1 协议+New IO的连接器。
    
    org.apache.coyote.http11.Http11AprProtocol : 使用APR(Apache portable runtime)技术的连接器,利用Nativ
    
    
    #以下三种实现方法则是与web server打交道
    org.apache.coyote.ajp.AjpProtocol:使用AJP协议的连接器,实现与web server(如Apache httpd)之间的通信
    
    org.apache.coyote.ajp.AjpNioProtocol:SJP协议+ New IO
    
    org.apache.coyote.ajp.AjpAprProtocol:AJP + APR

    二、Tomcat Connector的三种运行模式: bio nio apr

     

    三种模式对比:
    image

     

    关于tomcat的线程等参数配置,可参考我的另一篇文章:https://www.cnblogs.com/weiyiming007/p/12599917.html

     

    1、bio(blocking I/O)

    即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包)。是基于JAVA的HTTP/1.1连接器,Tomcat7以下版本在默认情况下
    是以bio模式运行的。一般而言,bio模式是三种运行模式中性能最低的一种(一个线程只处理一个请求)。自Tomcat 8.5 版本开始,Tomcat就移除了对BIO的支持;

    server.xml配置:

    <Connector  port=”8080
    protocol=”HTTP/1.1
      
    maxThreads=”150”  
    connectionTimeout=”20000”   
    redirectPort=”8443” />

    2、nio(new I/O)

    为了提高I/O性能,JDK自1.4版本引入了NIO模式,它弥补了原来BIO方式的不足,在标准的java代码中提供了 高速、面向块的I/O。 通过定义包含数据的类以及以块的形式处理数据,
    NIO可以在不编写本地代码的情况下利用底层优化,这是BIO所无法做到的;
    
    NIO模式 是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,它拥有比传统I/O操作(bio)更好的并发
    运行性能。要让Tomcat以nio模式来运行比较简单,只需要在Tomcat安装目录/conf/server.xml文件中将如下配置:

    server.xml配置:

    # protocol属性值改为org.apache.coyote.http11.Http11NioProtocol即可:
    
    <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
    connectionTimeout="20000"
    redirectPort="8443" />

    在tomcat8中有最新的nio2,速度更快,也建议使用nio2

    3、apr

    apr(Apache Portable Runtime/Apache可移植运行时),是Apache HTTP服务器的支持库。你可以简单地理解为,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来
    处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。 Tomcat apr也是在Tomcat上运行高并发应用的首选模式。如果我们的Tomcat不是在apr模式下运行,
    在启动Tomcat的时候,我们可以在日志信息中看到类似如下信息:
    
    2013-8-6 16:17:49 org.apache.catalina.core.AprLifecycleListener init
    信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments 
    was not found on the java.library.path: xxx/xxx(这里是路径信息)

    Tomcat apr运行模式的配置是三种运行模式之中相对比较麻烦的一种。据官方文档所述,Tomcat apr需要以下三个组件的支持:

    APR library  [APR库]
    
    JNI wrappers for APR used by Tomcat (libtcnative)  [简单地说,如果是在Windows操作系统上,就是一个名为tcnative-1.dll的动态链接库文件]
    
    OpenSSL libraries  [OpenSSL库]

    此外,与配置nio运行模式一样,也需要将对应的Connector节点的protocol属性值改为org.apache.coyote.http11.Http11AprProtocol

    不过,上述繁琐的操作都是Tomcat 7.0.30之前的版本才需要这样配置,从Tomcat 7.0.30版本开始,Tomcat已经自带了tcnative-1.dll等文件,并且

    默认就是在Tomcat apr模式下运行,因此我们只需要下载最新版本的Tomcat直接使用即可(没试过,暂时还是用的nio)。

    在Tomcat的启动日志信息中一般会包含当前的运行模式信息;

  • 相关阅读:
    mysql 更改字符集
    修改pip源
    git命令
    virtualwrapper使用
    Python环境搭建
    IntellIJ IDEA 配置 Maven 以及 修改 默认 Repository
    Spring4:JDBC
    Spring3:AOP
    Spring2:bean的使用
    Spring1:Spring简介、环境搭建、源码下载及导入MyEclipse
  • 原文地址:https://www.cnblogs.com/weiyiming007/p/12600027.html
Copyright © 2020-2023  润新知