咨询热线:13599308467 联系人:刘凯庆 地址:陕西省西安市莲湖区丰庆路中段68号
Tomcat 架构概述
来源:亚美多一点手机版 发布时间:2019-11-23 点击量:183
Tomcat 是一个 Web 应用服务器,它是对 HTTP 和 Servlet 规范的实现,简单来说它做了这几件事:处理 HTTP 协议、执行 Servlet 和处理网络 I/O。这里以 6.0.53 版本为例(实现了 HTTP/1.1、Servlet2.5),研究其基本结构。
关于源码版本,我使用的是 tomcat6,因为 7 为了重构有太多的抽象,看着实在费劲,6 代码虽有冗余但读起来很直观,并且低版本也不影响理解 Tomcat 的核心流程。
体系结构
从 server.xml
中就能够看出 Tomcat 各组件的层次结构,具体结构图如下:
服务器模型
服务器模型(或 I/O 模型),描述的是 TCP 连接的处理方式,以及 Socket 读写时线程的状态。Java 里常用的是 BIO 和 NIO,分别对应同步阻塞和同步非阻塞两种模型,Tomcat 中的 Connector 组件就是对这两种的封装实现。
BIO - 阻塞式
Tomcat 实现了一个一连接一线程的简单服务器模型,内部采用线程池做了优化,设计如下:
当 Acceptor 接收到一个 TCP 连接时,线程池分配一个线程进行处理;线程调用 read() 方法读取 Socket 输入流中的字节,此时线程阻塞(Block),直到收到客户端发送的数据;收到数据后,进行解码、业务处理、编码,最后把响应发送到客户端,关闭连接。由此可以看出,合理的分配线程池大小可以一定程度上提高系统的并发能力。
NIO - 非阻塞
BIO 的缺点在于不管当前连接有没有数据传输,它始终阻塞占用线程池内的一个线程,而 NIO 的处理方式是若通道无数据可读取,此时线程不阻塞直接返回,可用于处理其他连接,提高了线程利用率。那怎么知道什么时候处理数据的读写呢?当通道可读或可写时,内核会通知用户程序进行处理。
NIO 的编程比较复杂,常用的是 Reactor 模式,它描述了一个利用多路复用 I/O,基于事件驱动的服务器处理模型,(这里) 基于 Doug Lea 的 Scalable IO in Java 对 Reactor 进行了实现。Tomcat 的设计略有不同,其设计如下:
Acceptor 以阻塞模式接收 TCP 连接,然后将连接注册到 Poller 上;Poller 以非阻塞模式处理 SSL 握手和 HTTP 请求头的读取;BlockPoller 模拟阻塞处理 HTTP 请求体的读取和发送响应。值得注意的是,两类 Poller 都只是负责事件的通知,I/O 操作都是由线程池中的线程完成。那么,ServerSocketChannel 为什么阻塞?为什么要模拟阻塞处理请求体和 Servlet 响应?相关的讨论可参考:
Why Tomcat"s Non-Blocking Connector is using a blocking socket?Getting my head around NIO "simulated" blocking (trying to)Servlet API 的实现
Servlet 规范描述了容器如何加载和运行 Servlet,如和将请求映射到用户配置的 Servlet, 如何处理请求和响应等相关问题。Tomcat 主要实现了以下 API:
ServletConfig :Servlet 名字和初始化参数;ServletContext :定义了 Web 应用程序,Servlet 运行的上下文;ServletRequest :封装客户端请求;ServletResponse :封装服务端响应;FilterChain :请求过滤调用链;FilterConfig :过滤配置对象;RequestDispatcher :转发请求,将请求转发给 JSP 或另一个 Servlet 处理。其他如 Servlet、Filter、GenericServlet、HttpServlet 接口或类则由用户程序来实现,更多详细的介绍请参考规范内容。
小结
Tomcat 架构看着挺简单但做起来难,难的就是把复杂的问题抽象化、简单化,体现到代码上就是如何设计和抽象出类并且优雅的组织在一起,它作为一个流行的中间件,其内部代码的实现以及优化手段,也是值得我们去研究和模仿的。
相关产品
-
天猫作为品牌商重要的电商渠道,探路者已连续三年在天猫“双11”大促中持续领跑户外类目,天猫运动户外总负责人王飞对探路者品牌近年来在电商平台的表现给予高度认可。
-
据悉,Ashley Madison网站的男性与女性用户比例是五比一,而Avid Life Media公司委托安永会计师事务所(Ernst & Young)发布的一项报告证实,该公司确实使用了机器人美女与付费男性客户交谈。但该公司已经于2014年在美国、加拿大和澳大利亚客户中停止使用机器人美女,并于2015年后期在其他地区客户中停止使用机器人美女。
-
中新网4月29日电 据英国媒体报道,英国外交及联邦事务大臣菲利普·哈蒙德对古巴进行历史性的访问,期间表示,他热衷“与大西洋彼岸建立新的联系”。
-
只不过,JIP并不从事于产品制造,它是一家PE(私募股权)基金公司。根据官网介绍,JIP由瑞穗证券、贝恩资本、NTT DATA联合控股,该基金主要面向日本本土市场进行投资,致力于推动日本实业的发展,关注新兴市场。
-
至于江哥提到的担心惹上麻烦,前法官、宜宾学院法学院讲师周建宇认为,路遇他人发病自己想要采取措施施救,只要保留好证据,就可以免除法律风险。周建宇称,类似江哥所经历的情况,可以打开手机的音视频功能,最好有专人拍摄,即可证明自己是救人做好事。
-
山西站由晋城市登山户外运动协会执行承办,将秉承着”少年智则国智;少年富则国富;少年强则国强;少年独立则国独立;少年自由则国自由;少年进步则国进步;少年胜于欧洲则国胜于欧洲;少年雄于地球则国雄于地球“的思想着力为青少年打造五大营地:国防教育营地、生存训练营地、素质拓展营地、文化交流营地和劳动实践营地;搭建五大平台:军事教育、回归自然、拓展培训、户外体验和劳动实践。
-
谈及这部正在拍摄的作品,佟大为称这是他近十年来第一次出演偶像剧,并表示很高兴有刘诗诗加盟。剧中,佟大为虽然出演国际知名钢琴师,但他却坦言并未为此专门进行练习,“我姐姐小时候学钢琴,我曾跟姐姐旁观半年,但只会一首练习曲。没有一年两年(的学习),弹出来也是露怯,我更多是情感方面的演绎”。
-
据此前消息,该车在配置方面配备了全景天窗、EPB电子驻车、AUTO HOLD自动驻车、智能网联功能、AEB防撞系统、六安全气囊、ESC电子稳定控制系统、注意力警示辅助系统以及18英寸轮圈等配置。动力方面,骏派T086将搭载一台1.2T涡轮增压直喷发动机,最大功率为143马力,峰值扭矩为204牛·米,传动方面,将匹配手动变速箱和7速双离合变速箱。(文/汽车之家 柳伟)
热点资讯
- 一场阔别13年的重逢!全国首例DNA跨国认亲2019-06-28
- 稳定减震/智能训练,汗马家用室内静音动感单车299元(210元券)2019-06-28
- 低于2600的机会大于从丹北新浪财经uuuuuu撤资和撤资策略2019-11-08
- 盘点2018年五大让人最不能忍的游戏厂商捞钱套路2019-10-29
- 青海启动乡村旅游扶贫“送客下乡”2019-10-29
- 韩服《封印者》更新白角色四转介绍视频放出2019-06-28
- 陆文山:2019年上期所将有序推进产品创新2019-06-28
- 中船重工718所原所长被“双开”,违规获加拿大国籍2019-11-22