tomcat nio接收请求流程
2021-09-16 10:26:28 6 举报
tomcat nio接收请求流程
作者其他创作
大纲/内容
将request和response传给容器执行
CoyoteAdapter将Request转换为servlet中的Request
处理接收到的连接
serverSock.accept()阻塞
Poller.run()
NioEndpoint.Acceptor
从缓存中取出NioChannel对象,没有则创建一个
NioEndpoint.SocketProcessor线程
使用Http11Processor解析请求
将socketWrapper提交给ConnectHandler连接处理器处理请求
从缓存中获取当前连接的Processor对象。如果不存在,则尝试根据协商协议构造Processor(如HTTP/2.0)。如果不存在协商协议(如HTTP/1.1),则从回收队列中获取一个已释放的Processor对象使用。如果回收队列中没有可用的对象,那么由具体的协议创建一个Processor使用(同时注册到缓存)
处理事件
循环
Selector.select()
解析请求行和请求头,解析成Request
SocketChannel设置为非阻塞
从队列中将PollerEvent取出
封装了SoketChannel和SocketBufferHandler对象
Poller维护一个selector和事件队列
注册读事件到Poller持有的Selector上
从缓存获取Http11Processor
SocketProcessor提交到线程池处理
轮询线程,负责注册读写事件,并select读写事件的触发,提交给线程池处理
复用或创建SocketProcessor
将NioChannel注册到Poller(创建一个PollerEvent实例,添加到事件队列中)
0 条评论
下一页