Tomcat组成与工作原理,这一篇,很细 下

简介: Tomcat组成与工作原理,这一篇,很细 下

Comet

Comet是一种用于web的推送技术,能使服务器实时地将更新的信息传送到客户端,而无须客户端发出请求 在WebSocket出来之前,如果不使用comet,只能通过浏览器端轮询Server来模拟实现服务器端推送。 Comet支持servlet异步处理IO,当连接上数据可读时触发事件,并异步写数据(阻塞)54edf13465fab3d75f105eb9afcee8a.jpg

Tomcat要实现Comet,只需继承HttpServlet同时,实现CometProcessor接口

Begin:新的请求连接接入调用,可进行与Request和Response相关的对象初始化操作,并保存response对象,用于后续写入数据

Read:请求连接有数据可读时调用

End:当数据可用时,如果读取到文件结束或者response被关闭时则被调用

Error:在连接上发生异常时调用,数据读取异常、连接断开、处理异常、socket超时

Note:

Read:在post请求有数据,但在begin事件中没有处理,则会调用read,如果read没有读取数据,在会触发Error回调,关闭socket

End:当socket超时,并且response被关闭时也会调用;server被关闭时调用

Error:除了socket超时不会关闭socket,其他都会关闭socket

End和Error时间触发时应关闭当前comet会话,即调用CometEvent的close方法 Note:在事件触发时要做好线程安全的操作

异步Servlet

77fbde1333fbc7c1b4764938cd1a578.png

传统流程:

首先,Servlet 接收到请求之后,request数据解析;

接着,调用业务接口的某些方法,以完成业务处理;

最后,根据处理的结果提交响应,Servlet 线程结束

051accff97eae8f29362ebab081908d.png

异步处理流程:

客户端发送一个请求

Servlet容器分配一个线程来处理容器中的一个servlet

servlet调用request.startAsync(),保存AsyncContext, 然后返回

任何方式存在的容器线程都将退出,但是response仍然保持开放

业务线程使用保存的AsyncContext来完成响应(线程池)

客户端收到响应

Servlet 线程将请求转交给一个异步线程来执行业务处理,线程本身返回至容器,此时 Servlet 还没有生成响应数据,异步线程处理完业务以后,可以直接生成响应数据(异步线程拥有 ServletRequest 和 ServletResponse 对象的引用)

为什么web应用中支持异步?

推出异步,主要是针对那些比较耗时的请求:比如一次缓慢的数据库查询,一次外部REST API调用, 或者是其他一些I/O密集型操作。这种耗时的请求会很快的耗光Servlet容器的线程池,继而影响可扩展性。

Note:从客户端的角度来看,request仍然像任何其他的HTTP的request-response交互一样,只是耗费了更长的时间而已

异步事件监听

onStartAsync:Request调用startAsync方法时触发

onComplete:syncContext调用complete方法时触发

onError:处理请求的过程出现异常时触发

onTimeout:socket超时触发

Note : onError/ onTimeout触发后,会紧接着回调onComplete onComplete 执行后,就不可再操作request和response

总结:

  开源的 Java Web 应用服务器,实现了 Java EE(Java Platform Enterprise Edition)的部 分技术规范,比如 Java Servlet、Java Server Page、JSTL、Java WebSocket。Java EE 是 Sun 公 司为企业级应用推出的标准平台,定义了一系列用于企业级开发的技术规范,除了上述的之外,还有 EJB、Java Mail、JPA、JTA、JMS 等,而这些都依赖具体容器的实现。

目录
相关文章
|
4月前
|
设计模式 网络协议 Java
Tomcat 高并发之道原理拆解与性能调优
Tomcat 高并发之道原理拆解与性能调优
55 0
|
4月前
|
设计模式 Java 应用服务中间件
Tomcat 架构原理解析到设计借鉴
Tomcat 架构原理解析到设计借鉴
151 0
|
4月前
|
设计模式 Java 应用服务中间件
Tomcat 架构原理解析到架构设计借鉴
Tomcat 架构原理解析到架构设计借鉴
106 0
|
2月前
|
设计模式 安全 Java
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
35 0
|
8月前
|
安全 Java 应用服务中间件
【JavaWeb】Tomcat底层机制和Servlet运行原理
网络通信:Tomcat使用Java的Socket API来监听特定的端口(通常是8080),接收来自客户端的HTTP请求。 线程池:Tomcat使用线程池来处理并发的请求。当有新的请求到达时,Tomcat会从线程池中获取一个空闲线程来处理该请求,这样可以提高处理效率。 生命周期管理:Tomcat负责管理Servlet和其他Web组件的生命周期,包括初始化、请求处理和销毁等阶段。(init(), run())
|
11天前
|
安全 Java 应用服务中间件
【小白误闯】这可能是对 Tomcat 工作原理解释最详细的文章
脑子一闪而过,当年 V 哥在面试 Java 开发时,被问到让你写一个 Tomcat 服务器,你有什么想法?尼码,面试官摆明是在压工资了,你得逞了,我回答不上来,当时也没研究过 Tomcat 的源码,饮恨被拒。今天想想看,当时尴尬的表情,蛮逗的嘞。 今天V 哥有空把这个问题整理出来,干脆写成文章吧,放到资料库里,也分享给大家。Tomcat 是一个流行的 Java Servlet 和 JSP 容器,用于运行 Java Web 应用程序。它的核心组件主要包括:
|
16天前
|
算法 Java 应用服务中间件
Tomcat性能优化及JVM内存工作原理
Tomcat性能优化及JVM内存工作原理
|
2月前
|
存储 负载均衡 NoSQL
【分布式技术架构】「Tomcat技术专题」 探索Tomcat集群架构原理和开发分析指南
【分布式技术架构】「Tomcat技术专题」 探索Tomcat集群架构原理和开发分析指南
52 1
|
2月前
|
XML Java 应用服务中间件
总在说SpringBoot内置了tomcat启动,那它的原理你说的清楚吗
总在说SpringBoot内置了tomcat启动,那它的原理你说的清楚吗
30 0
|
5月前
|
网络协议 Java 应用服务中间件
Tomcat组成与工作原理(二)
Tomcat组成与工作原理(二)
35 0