tomcat架构:Connector

本文详细介绍了Tomcat Connector的配置,包括HTTP协议的BIO和NIO实现。深入剖析了消息流,涉及Http11Protocol的Acceptor、Worker和Http11Processor组件,以及它们在NIO模式下的工作原理。此外,还解释了CoyoteAdapter的作用,它是如何将http request转换为HttpServletRequest并执行。Mapper模块则负责http request到servlet的映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

配置与配置项
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

tomcat中connector配置如上,如何处理来访是由protocol属性决定的,对HTTP协议而言,这个属性可以配置的值有:

  1. HTTP/1.1
  2. org.apache.coyote.http11.Http11Protocol –BIO实现
  3. org.apache.coyote.http11.Http11NioProtocol –NIO实现
  4. 定制

配置“HTTP/1.1”和“org.apache.coyote.http11.Http11Protocol”的效果是一样的,因此connector的HTTP协议实现缺省是支持BIO的。无论是BIO还是NIO都是实现一个org.apache.coyote.ProtocolHandler接口,如果需要定制化,也必须实现这个接口。

消息流

这里写图片描述

模块解释

三大模块:Http11Protocol、Mapper、CoyoteAdapter,分别说一下

Http11Protocol

三个部分:Acceptor、Worker、Http11Processor。
Acceptor:Acceptor接收socket,然后从Worker线程池中获取空闲的线程处理socket,如果Worker线程池中没有空闲线程,Acceptor间被阻塞(这既是所谓的BIO,而NIO在此处的处理则是多了一个队列events queue和一个轮询线程Poller,Acceptor接收到socket后,最终会将请求封装成一个PollerEvent对象,并将该对象压入队列events queue,Poller线程中不断的扫描队列,如果有新的PollerEvent对象,则获取其中的socket,并从worker线程池中拿到可用的Worker线程进行处理,典型的生产者消费者模式,Acceptor线程为生产者,Poller为消费者,这样的话Acceptor线程就不会被阻塞,也就是NIO非阻塞,简单理解下吧)。

Worker:Worker线程拿到socket,就从Http11Processor对象池中获取Http11Processor对象进行处理,Http11Processor将调用CoyoteAdapter进行处理

CoyoteAdapter

此对象负责将http request解析成HttpServletRequest对象,然后执行

connector.getContainer().getPipeline().getFirst().invoke(request, response);

connector的容器使StandardEngine,由此请求已经交由Container处理,由代码可以看到pipeline valve的起点就是Adapter。

Mapper

保存http request到servlet的映射,用于快速定位servlet。

最后再放一张NIO的消息流

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值