加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

查漏补缺:毗连器在Tomcat中是怎样计划的

发布时间:2019-09-24 21:00:06 所属栏目:业界 来源:今日头条
导读:从毗连器(Connector)源码提及 既然是来理会毗连器(Connector),那么我们直接从源码入手,后头全部源码我会剔除不重要部门,以是会忽略大部门源码细节,只存眷流程。源码如下(高能预警,大量代码): publicclassConnectorextendsLifecycleMBeanBase{ public

Poller挪用的run要领可能用Executor线程池去执行run(),最终挪用都是各个子EndPoint中的doRun()要领,最终会取一个Handler行止理赏罚socketWrapper。继承看源码:

  1. //类:13.AbstractProtocol内部类ConnectionHandler implements AbstractEndpoint.Handler<S> 
  2.  public SocketState process(SocketWrapperBase<S> wrapper, SocketEvent status) { 
  3.  //省略部门代码 
  4.   
  5.  state = processor.process(wrapper, status); 
  6.   
  7.  return SocketState.CLOSED; 
  8.  } 
  9.   
  10. //类:14.AbstractProcessorLight implements Processor  
  11. public SocketState process(SocketWrapperBase<?> socketWrapper, SocketEvent status) 
  12.  throws IOException { 
  13.  //省略部门代码 
  14.   
  15.  state = service(socketWrapper); 
  16.   
  17.  return state; 
  18.  } 

这部门源码表白最终挪用的process是通过一个Processor接口的实现类来完成的,这里最终也是会挪用到各个子类中,那么这里的处理赏罚器着实就是处理赏罚应用协议,我们可以查察AbstractProcessorLight的实现类,别离有AjpProcessor、Http11Processor、StreamProcessor,别离代表tomcat支持三种应用层协议,别离是:

  • AJP协议
  • HTTP.1协议
  • HTTP2.0协议

这里我们以常用的HTTP1.1为例,继承看源码:

  1. //类:15. Http11Processor extends AbstractProcessor 
  2. public SocketState service(SocketWrapperBase<?> socketWrapper) 
  3.  throws IOException { 
  4.  //省略大部门代码 
  5.  getAdapter().service(request, response); 
  6.  //省略大部门代码  
  7.  }  
  8. //类:16 CoyoteAdapter implements Adapter 
  9. public void service(org.apache.coyote.Request req, org.apache.coyote.Response res) 
  10.  throws Exception { 
  11.  Request request = (Request) req.getNote(ADAPTER_NOTES); 
  12.  Response response = (Response) res.getNote(ADAPTER_NOTES); 
  13.  postParseSuccess = postParseRequest(req, request, res, response); 
  14.  if (postParseSuccess) { 
  15.  //check valves if we support async 
  16.  request.setAsyncSupported( 
  17.  connector.getService().getContainer().getPipeline().isAsyncSupported()); 
  18.  // Calling the container 
  19.  connector.getService().getContainer().getPipeline().getFirst().invoke( 
  20.  request, response); 
  21.  } 
  22.   
  23.  } 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读