门客网,cad图库大全,首发ss52ss
目录
@(详解socket如何封装成request)
看源码虽然不能马上提升你的编码水平。但能让你更好的理解编程。
因为我们tomcat多是以nio形式处理请求,所以本系列讲的都是nio类型请求的处理相关组件。
在讲解过程之前,把相关概念理解是非常关键的。
tomcat中connector是负责处理请求的。
connector使用protocolhandler处理器来处理请求。不同的protocolhandler代表不同连接类型。
protocolhandler处理器可以用看作是协议处理统筹者,通过管理其他工作组件实现对请求的处理。protocolhandler 包含了三个非常重要的组件:
endpoint: 负责接受,处理socket网络连接
processor: 负责将从endpoint接受的socket连接根据协议类型封装成request
adapter:负责将封装好的request交给container进行处理。
niochannel: socketchannel的基础包装类,在endponit中使用。
socketwrapper:socket的包装类,用于携带(niochannel)socket进行传递。
区别:niochannel是基本包装,socketwrapper是对niochannel的进一步包装.
tomcat中存在两组request,respone
所以tomcat中会有一个涉及request与request的转换过程,这些过程都放到后续讲,此篇只讲解组件概念。
tomcat内部使用apache coyote库来处理网络i/o的。connector包多是用于serlvet规范。
tomcat内部很多都命名为处理器。这里讲讲提几个讲讲区别:
connectionhandler:连接处理器,.内部维护processor的map用于重用socketprocessor. 把创建processor的工作交给protocolhandler去做.
socketprocessor处理器调用connectionhandler.process()将socket请求内容传入processor.process()进行处理.
由此可见connectionhandler具有承上启下的作用.(processor)http11processor: http协议1.1是目前使用最多的一个http协议版本。从此处理器的名字我们也可以看出,他就是针对此协议的处理。此处理器是将socket转为请求的主要组件,他从socket将http协议的内容解析出来,不过在tomcat中他只负责了对http请求行,请求头的解析;请求体的解析延迟到了servlet中去解析了。 http11processor 由connectionhandler 创建,tomcat 对关键的类都实现了重用,以减少频繁创建和销毁的开销,会从recycledprocessors 里pop出来
掌握了这些相关组件的概念后。下章讲解socket如何变成request。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
浅析我对 String、StringBuilder、StringBuffer 的理解
使用IDEA搭建SSM框架的详细教程(spring + springMVC +MyBatis)
Springboot整合freemarker 404问题解决方案
引入mybatis-plus报 Invalid bound statement错误问题的解决方法
网友评论