Connector连接器属性整体概述(Connector属性源码分析之一)

前面我们通过接近20篇文章讲述了Connector整体架构,不同Connector的分类,还有一些技术的细枝末节;

在Tomcat中,Connector基本上可以说是最重要的组件了,其属性之多,并且这些属性针对于Tomcat调优之重要,都需要我们应该逐个仔细的去研究这些属性;

Introduction

The HTTP Connector element represents a Connector component that supports the HTTP/1.1 protocol. It enables Catalina to function as a stand-alone web server, in addition to its ability to execute servlets and JSP pages. A particular instance of this component listens for connections on a specific TCP port number on the server. One or more such Connectors can be configured as part of a single Service, each forwarding to the associated Engine to perform request processing and create the response.


Connector元素的实际意思是支持 HTTP/1.1 协议,有了这个元素,其就可以使Catalina引擎能变成一个独立的web server,并且还能支持servlet和jsp页面;

该组件是监听请求连接,并监听对应的服务器TCP端口;

Connector是Service服务的一部分,而Connector中需要关联Engine用来解析Request和创建Response返回给客户端;


If you wish to configure the Connector that is used for connections to web servers using the AJP protocol (such as the mod_jk 1.2.x connector for Apache 1.3), please refer to the AJP Connector documentation.


需要注意的是,本Connector系列配置只针对于非AJP协议,也就是HTTP/1.1 协议;


Each incoming request requires a thread for the duration of that request. If more simultaneous requests are received than can be handled by the currently available request processing threads, additional threads will be created up to the configured maximum (the value of the maxThreads attribute). If still more simultaneous requests are received, they are stacked up inside the server socket created by the Connector, up to the configured maximum (the value of the acceptCount attribute). Any further simultaneous requests will receive "connection refused" errors, until resources are available to process them.

    每一个请求下来其实都需要一个工作线程处理该请求;

    当有很多请求过来,如果当前工作线程不够,会自动增加工作线程进行应对处理,最大同时能有maxThread个工作线程在同时工作;

    如果这个时候还有大量请求过来,一直到acceptCount个Acceptor线程进行接收socket,超出就阻塞了;

    如果这个时候还有请求过来,那就接收 connection refused;就一直到有对应的资源

    ===========>这个是Tomcat前端的工作策略,需要重点关注,我们后面的很多属性都围绕着这个策略进行讲解;

我们再来看看Connector属性的分类:

 

1.Common Attributes

 Connector的通用属性,例如端口监听,协议等等,这些属性都是最基础的属性,即使你自定义自己实现Connector,这些属性你也应该实现;


2.Standard Implementation

The standard HTTP connectors (BIO, NIO, NIO2 and APR/native) all support the following attributes in addition to the common Connector attributes 

Tomcat实现的Connector默认实现的属性,这些属性也具有通用性,无论是BIO, NIO, NIO2 and APR/native 各种通道;


3.Java TCP socket attributes

The BIO, NIO and NIO2 implementation support the following Java TCP socket attributes in addition to the common Connector and HTTP attributes

Tomcat的BIO,NIO,NIO2的通道都是接受java的socket(APR是通过JNI连接C的Socket),这些socket属性的配置决定了服务器端的socket行为


4.BIO specific configuration

BIO通道的特有配置,比较少


5.NIO specific configuration

NIO通道的特有配置,因为NIO通道自带一个poller线程,因此大多数配置都是基于这个Poller和关于java NIO 的Selector的;


6.NIO2 specific configuration

NIO2通道的特有配置,因为NIO2是采用操作系统纯异步IO来做的,所以配置还不一样,主要是基于socket又增加了很多的属性,用以纯异步IO


7.APR/native specific configuration

APR通道是与Tomcat-native,APR框架,openssl在一块用于JNI对接C程序的一个通道,其主要有两方面的考量;

一是,该通道利用APR的高性能,特别是JDK版本较低,效率比较低的时候,这个时候通过JNI进行调用APR库,往往进行socket收发要高于JDK的socket代码,也就是上面第三个Java TCP socket attributes的配置;

二是,该通道可以和openssl进行对接,openssl主要做https的加密传输,直到现在为止,java的加密通信依然是一个大的漏勺,效率不如openssl,所以,该APR通道在JDK效率提升之后,其实目前主要场景是应对https通信传输;

该通道java部分在APR Connector这块,对接的JNI代码是tomcat-native,tomcat-native起到一个对APR库,openssl库包装调用的作用;


本系列后续会用10多篇对上述这些Connector属性进行逐一的源码分析,敬请期待!

本站公众号
   欢迎关注本站公众号,获取更多程序园信息
开发小院