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);
- }
-
- }
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|