参考博客:
Tomcat源码之Connector (1)
一、 Connector介绍
1. Connector
监听端口,接受客户端请求并转交给Engine处理,同时将答复转发给客户端。
2. Connector种类
与Connector相关的类都在org.apache.coyote包中,分为几类:
- 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之后性能非常强劲。
具体地,Tomcat7中实现了以下几种Connector:
- 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)技术的连接器,利用Native代码与本地服务器(如Linux)来提高性能。
以上三种Connector实现都是直接处理来自客户端Http请求,加上NIO或者APR
- 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
以上三种实现方法则是与web server打交道,同样加上NIO和APR
我们可以通过实现ProtocolHandler接口来定义自己的Connector。
3. Connector的配置
对Connector的配置位于conf/server.xml文件中,内嵌在Service元素中,可以有多个Connector元素。
1) BIO HTTP/1.1 Connector配置
一个典型的配置如下:
<Connector port=”8080” protocol=”HTTP/1.1” maxThreads=”150” connectionTimeout=”20000” redirectPort=”8443” />
其它一些重要属性如下:
acceptCount : 接受连接request的最大连接数目,默认值是10
address : 绑定IP地址,如果不绑定,默认将绑定任何IP地址
allowTrace : 如果是true,将允许TRACE HTTP方法
compressibleMimeTypes : 各个mimeType, 以逗号分隔,如text/html,text/xml
compression : 如果带宽有限的话,可以用GZIP压缩
connectionTimeout : 超时时间,默认为60000ms (60s)
maxKeepAliveRequest : 默认值是100
maxThreads : 处理请求的Connector的线程数目,默认值为200
如果是SSL配置,如下:
<Connector port="8181" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol = "TLS"
address="0.0.0.0"
keystoreFile="E:/java/jonas-full-5.1.0-RC3/conf/keystore.jks"
keystorePass="changeit" />
其中,keystoreFile为证书位置,keystorePass为证书密码.
2) NIO HTTP/1.1 Connector配置
<Connector port=”8080” protocol=”org.apache.coyote.http11.Http11NioProtocol” maxThreads=