Poller调用的run方法或者用Executor线程池去执行run(),最终调用都是各个子EndPoint中的doRun()方法,最终会取一个Handler去处理socketWrapper。继续看源码:
- //类:13.AbstractProtocol内部类ConnectionHandler implements AbstractEndpoint.Handler<S>
- public SocketState process(SocketWrapperBase<S> wrapper, SocketEvent status) {
- //省略部分代码
-
- state = processor.process(wrapper, status);
-
- return SocketState.CLOSED;
- }
-
- //类:14.AbstractProcessorLight implements Processor
- public SocketState process(SocketWrapperBase<?> socketWrapper, SocketEvent status)
- throws IOException {
- //省略部分代码
-
- state = service(socketWrapper);
-
- return state;
- }
这部分源码表明最终调用的process是通过一个Processor接口的实现类来完成的,这里最终也是会调用到各个子类中,那么这里的处理器其实就是处理应用协议,我们可以查看AbstractProcessorLight的实现类,分别有AjpProcessor、Http11Processor、StreamProcessor,分别代表tomcat支持三种应用层协议,分别是:
这里我们以常用的HTTP1.1为例,继续看源码:
- //类:15. Http11Processor extends AbstractProcessor
- public SocketState service(SocketWrapperBase<?> socketWrapper)
- throws IOException {
- //省略大部分代码
- getAdapter().service(request, response);
- //省略大部分代码
- }
- //类:16 CoyoteAdapter implements Adapter
- public void service(org.apache.coyote.Request req, org.apache.coyote.Response res)
- throws Exception {
- Request request = (Request) req.getNote(ADAPTER_NOTES);
- Response response = (Response) res.getNote(ADAPTER_NOTES);
- postParseSuccess = postParseRequest(req, request, res, response);
- if (postParseSuccess) {
- //check valves if we support async
- request.setAsyncSupported(
- connector.getService().getContainer().getPipeline().isAsyncSupported());
- // Calling the container
- connector.getService().getContainer().getPipeline().getFirst().invoke(
- request, response);
- }
-
- }
(编辑:PHP编程网 - 黄冈站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|