Tomcat7.0.42源码研读之网络连接器Connector(三)

本文详细介绍了Tomcat中Connector的工作原理及其配置优化方法。Connector作为网络连接器,负责监听端口、解析请求并映射到容器处理。文章还探讨了关键配置参数如maxThreads、backlog的作用。


    Tomcat中Connector代表了网络连接器,连接器支持HTTP、AJP协议,还支持多种I/O方式:BIO、NIO、APR。一个Connector应该要做到这几个功能:


     1、监听服务器端口,获取来自客户端的请求

     2、将请求数据按照指定协议进行解析

     3、根据请求地址寻找合适的容器处理

     4、将服务端响应返回给客户端


     基于此,Tomcat给出的设计方案如下:

    


        其中,ProtocolHandler代表了一个协议处理器,它还包含了一个Endpoint用来启动一个Socket监听。在Connector启动时,根据conf/server.xml文件配置的Connector来启动相应的Endpoint来监听服务器端口,并在接收到来自客户端的请求后调用Processor进行数据读取。当Processor读取完客户端请求数据,需要按照请求地址映射到具体容器进行处理,这个过程即为请求映射。Tomcat是通过Mapper和MapperListener两个类来做映射处理的。

       Tomcat是通过适配器模式完成了Connector和Mapper、Container容器的解耦,到此Tomcat整体设计如下:

       


         Tomcat可以在conf/server.xml配置文件中对Connector组件的参数进行设置,配置得当可以做到性能调优:

         

         

属性说明
maxThreadsTomcat是一款多线程的服务器,每个请求都会分配一个线程进行处理。maxThreads用于指定Connector创建的请求处理线程的最大值。该属性决定了Tomcat可以并发处理的上限,当并发请求数超过这个值的时候,多余的请求只能排队等待
maxSpareThreadsTomcat允许的最大空闲线程数目,超出的空闲线程将被直接关闭
minSpareThreadsTomcat允许的最小空闲线程数目,也是启动Connector时创建的线程数目,如果空闲线程数小于该值,Tomcat将创建新的线程
TcpNoDelay对应TCP的TCP_NO_DELAY选项
backlog也可以配置acceptCount参数,这两个参数最终都会被Tomcat映射成backlog参数,文章后面重点讲解下ServerSocket的这个backlog参数
maxConnections作用跟maxThreads相同
acceptorThreadCount这个参数决定了Tomcat会启动多少个线程用来accept socket请求,默认为1
connectionTimeoutTomcat将其映射到Socket的SO_TIMEOUT参数,代表Socket在堵塞读写时,两个TCP包到来的最大间隔时间
  
  
  

         

   重点知识讲解:

  

backlog参数Tomcat会启动一个acceptor线程来进行ServerSocket的accept socket操作,然后交由工作线程池来进行具体的业务处理。对于客户端的一个请求进来,详细流程是这样的:tcp的三次握手建立连接,建立连接的过程中,操作系统维护了半连接队列(syn队列)以及完全连接队列(accept队列),在第三次握手之后,Tomcat收到了来自客户端的ack消息,随后进入establish的状态,然后该TCP连接由syn队列移到accept队列。Tomcat的acceptor线程则负责从accept队列中取出该TCP连接,接受该Socket,然后交给工作线程去处理,然后Tomcat自己接着去accept队列取socket(当当前Tomcat工作线程池处理的socket连接超过maxConnections的时候,acceptor线程自己会阻塞等待,等连接降下去之后,才去处理TCP accept队列的下一个连接)。backlog指的就是这个accept队列的大小
  
  
  
  
  
  
  
  
  


      关键代码片段如下:

      




     

源码下载地址: https://pan.quark.cn/s/2e09cbca2d82 【针对青龙面板wxpusher推送问题的修复包】是一个为青龙面板(QL Panel)设计的更新或改进版本,其目的是纠正与wxpusher相关的推送故障。青龙面板是一个被广泛应用的自动化部署及管理解决方案,它赋予用户在图形化环境中执行多种IT运维操作的能力,涵盖脚本操作、周期性任务执行以及文件处理等。wxpusher作为青龙面板的一个附加组件,承担着实现微信消息推送的任务,用以保障用户可以即时获取系统关键状态变动或异常警报。 sendNotify.js 是此修复包内含的关键模块,属于wxpusher插件的一部分,其核心职责是发送各类通知。在JavaScript编程语言中,该脚本或许内含了处理推送流程、调用微信推送端点以及消息内容的格式化和校验等操作。一旦青龙面板监测到新的事件状况,例如任务成功完成、发生错误或系统进入维护阶段,sendNotify.js便会被激活,将相关数据传送至用户的微信账户。 ql.js 另一个重要的构成部分,可能代表了青龙面板的核心代码库或专用于wxpusher的设定文档。它或许包含了整合wxpusher的相关参数,例如启动过程、授权核实、故障应对和日志管理等功能。ql.js与sendNotify.js协同工作,确保wxpusher能够顺利与青龙面板进行数据交互,并可靠地向用户传递通知信息。 CK_WxPusherUid.json 这一文档很可能是储存用户信息或配置参数的JSON格式文件。"CK"通常指代Cookie或某种缓存机制,而"WxPusherUid"可能意指wxpusher用户的专属识别码。该文件用于保存用户微信推送服务的连接详情,让青龙面板可以...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值