Tomcat源码分析:Socket网络通信和线程模型体系结构设计

389次阅读  |  发布于4年以前

原文链接:https://blog.csdn.net/u010013573/java/article/details/86767028

一、概述

Tomcat在设计当中,自顶向下主要包括:Catalina容器,Coyte连接器和底层Socket通信端点EndPoint三部分组成。底层Socket通信端点EndPoint主要完成socket通信的相关细节和整个Tomcat框架线程模型的实现。

服务启动:Tomcat启动时,从Catalina容器开始启动,往下依次创建和启动Coyote连接器,创建服务端监听请求socket和请求处理工作线程池。

请求处理:在客户端发起连接请求时,则是服务端监听请求socket先监听到客户端连接请求,然后处理socket三次握手等细节,将对应的channel注册NIO的selector,由selector负责监听该客户端后续数据请求到来。当客户端发起数据请求时,则从工作线程池获取一个线程,由该线程负责该请求整体的处理过程,包括通过coyte连接器传送到Catalina容器,交给对应的应用处理。

二、Socket体系和线程模型

这里主要基于NIO的socket对Tomcat的Socket和线程模型体系结构进行分析。

在Tomcat的体系结构设计当中,上层的Catalina容器和Coyte连接器主要是对Servlet规范的实现,其中并不涉及底层通信相关的数据处理和线程分配逻辑,而这部分主要是在底层socket通信Endpoint来完成。

Endpoint

Tomcat主要通过Endpoint来抽象底层整体的socket通信和线程模型设计,在抽象类AbstractEndpoint中负责定义。

启动流程

Acceptor线程

Poller线程

Executor工作线程池

NioSocketWrapper

对Socket进行包装,添加poller等的引用,以及定义字节数据读写的方法。

SocketProcessor

Socket数据处理器,实现Runnable接口,在run方法中对socket请求数据进行处理,以及调用Handler将数据往上传给Coyte连接器和Catalina容器。

从工作线程池Executor中获取一个工作线程来执行以上过程。

Handler

链接Endpoint和Coyte连接器和Catalina容器,将底层数据往上传给Catalina容器处理。

三、TCP和连接相关默认值

连接数相关

最大连接数:10000,在NIO2中为-1,表示不限制。

http和tcp相关

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8