说过了服务器启动,最后来看一下请求处理过程,服务器启动好后,处于待命状态,请求来了,请求处理过程由分两个建阶段:
前面有提到,从线程池中固定分配了一个线程专门用于等待新连接,就是上图的监听线程,没有请求来时,该线程是阻塞在accept()方法上的,当新连接来建立连接时,accept方法分配了一个socket,并将其设置为nonblocking,最后要做的就是将该socket丢给某个Acceptor线程(基本上机会均等)处理,然后立马返回继续处于接受状态,可以这个线程的工作是相当的简单的,效率那也是相当的高。
Acceptor线程有很多个(全部来自于线程池,并且固定分配出来,基于jetty.xml配置中的Acceptors配置数量),每个线程都维护了一个SelectSet,每个SelectSet又对应了一个Selector,这些线程会检测当前是否有任务来,例如检测changes队列中是否有任务,有并且是新连接,那么就迅速建立一个endpoint点负责管理这个socket,并注册read事件,后续该selector就会负责该连接的read事件监听。
对于连接很多的情况,这里分很多个Selector来分别监听,提高了效率。
当数据发送过来时,Selector检测到read事件,会立马调用endpoint的schedule()方法,该方法目的就是从线程池分配一个worker线程专门来处理这个read事件,而自己却立马返回继续监听,可见,这里也是一个高效的处理方式。
业务线程分配成功后,负责请求的读取以及解析,如果请求是完整的,那么就开始调用Server的handle方法(server本身就是一个handler),开始handler的处理,最后调用到SerlvetHandler,最终交给Servlet、Filter,开始了我们的自己应用。
后记
1、 Jetty的模块化做得非常好,可以随时替换其中的绝大部分关键部件,也可以拆掉,例如不需要处理Session,可以简单配置一下即可搞定,不需要处理Servlet,可以不用配置ServletHandler.
2、 jetty 采用非阻塞IO时,我们可以看到从头到尾的几次线程池分配情况,第一次分配一个固定线程监听新连接,第二次分配N个固定线程监听read事件(这里的N个线程在7.3版本中配置文件中配置acceptors数量即可,也就是说会从线程池固定分配N个线程出来),第三次分配线程就是read事件到来之后,立即分配一个业务线程(这个是临时的,用了要回收)处理数据直到我们应用返回结果。最后有一个地方上面都没有说到,那就是超时等原因要关闭连接时,是分配了临时线程来处理这些事情
3、 模块化、切分task
4、 小,真的很小
延伸阅读
1、 Jetty continuations
2、 Tomcat comet
分享到:
相关推荐
- Jetty服务器的安装非常简单,通常只需将下载的压缩包(如`jetty-distribution-7.6.5.v20120716`)解压到任意目录即可。解压后的目录包含了所有运行所需文件,包括启动脚本和配置文件。 - 部署Web应用时,只需将...
与许多其他Web服务器不同,Jetty没有采用多层架构,而是采用了基于事件驱动的单线程模型,这使得它在处理高并发请求时表现出色。每个连接都由一个单独的线程负责,避免了线程上下文切换带来的开销,提高了系统性能。...
1. **Jetty服务器基础**:了解Jetty的基本架构和功能,包括它如何处理HTTP请求和响应,以及如何加载和执行Servlet。 2. **内嵌Jetty的实现**:学习如何通过Java代码创建并启动一个内嵌的Jetty服务器,这通常涉及...
#### 四、Jetty服务器架构 Jetty采用了层次分明的架构设计,便于扩展和维护。其核心架构图如下所示: - **Server**:顶层容器,管理所有组件。 - **Handler**:处理特定的请求。 - **Connectors**:负责建立网络...
1. **Jetty服务器核心**:包含了运行Jetty服务器所需的基本组件。 2. **Servlet容器**:支持Servlet 3.1规范,可以处理HTTP请求并分发到对应的Servlet。 3. **配置文件**:如`start.ini`或`jetty.xml`,用于配置...
Jetty 8.0是Java应用服务器的一种,主要用于托管Web应用程序。它是一个开源项目,以其轻量级、高效和易于...用户可以通过遵循read-Me.text中的指南来设置和运行Jetty服务器,然后将他们的Web应用部署到这个服务器上。
#### 二、Jetty架构分析 - **总括**:Jetty的核心设计理念在于其简洁高效的架构设计,使得开发者能够在短时间内轻松搭建起Web应用环境。 - **主要组成部分**:Jetty可以大致分为四个主要部分——`HttpServer`、`...
Jetty服务器的架构设计使其可以轻松地与其他Java库集成,例如Spring框架,这使得开发者能够在不增加太多复杂性的情况下构建复杂的Web应用。它的模块化特性意味着你可以根据需要选择安装和配置特定的服务,如...
为了方便管理和调试,Jetty提供了一些工具,如`jetty-maven-plugin`,它可以将Maven项目直接部署到Jetty服务器上。此外,还有`jetty-admin`和`jetty-console`等工具,用于远程管理和监控Jetty实例。 ### 《Jetty6_...
这个jar文件包括了Jetty服务器的基本架构,如服务器启动、线程池管理、HTTP连接器、请求处理等。此外,它还支持WebSocket、Continuation和 Comet编程模型,这些都是现代Web应用中的重要特性。 其次,jetty-...
在研究Android平台i-Jetty服务器在智能家居中的应用时,首先需要了解智能家居的基本概念以及它的核心技术——物联网(Internet of Things, IoT)。智能家居系统是一种融合了计算机、通信、控制技术于一体的现代化家居...
为了在Jetty服务器上部署WebSocket应用,可以将WebSocket端点类打包到一个Java Web应用程序中,并通过Jetty的Web应用部署机制(如`web.xml`配置或使用Jetty的`Server`和`WebAppContext`类)进行部署。 标签"jetty...
本实战项目旨在帮助初学者快速掌握Jetty的嵌入式使用方法,通过实例化和配置Jetty服务器,实现Web应用的快速启动和运行。 1. **Jetty简介** - Jetty是一个开源的HTTP服务器和Servlet容器,它遵循Java Servlet和JSR...
这样,开发工具就能自动识别并加载这个插件,使得你可以在不安装完整Jetty服务器的情况下,直接在IDE内部启动和调试Web应用。 标签中的关键词进一步解释了这个压缩包的内容和用途: 1. "jetty插件包":这是关于...
总的来说,Jetty 6.1.26虽然相对较老,但它体现了Jetty服务器的核心设计理念和优势,如轻量级、高性能和灵活性。尽管现代开发可能更倾向于使用更新的版本,但对于了解Jetty的历史和原理,以及在某些场景下部署旧项目...
【标题】"jetty-distribution-9.1.0.v20131115"指的是Jetty服务器的一个发行版本,这个版本发布于2013年11月15日。Jetty是一个开源的、轻量级的Java Web服务器和HTTP服务器,它主要被设计用于快速开发和部署Web应用...
内置 Jetty 服务器是 Spring Boot 的一个重要特性,允许开发者快速启动和运行 web 应用,而无需手动配置服务器。Jetty 是一个轻量级、高性能的开源 HTTP 服务器和 Java Servlet 容器,它被广泛用于各种类型的 web ...
在"run-jetty-run"插件中,它会描述如何将Jetty集成到Eclipse的工作流中,比如创建和管理Jetty服务器实例的菜单项和快捷方式。 2. **icons**: 此目录包含了插件在Eclipse界面中使用的图标,例如启动、停止Jetty...
通过以上分析,我们可以了解到i-jetty作为一款开源的轻量级Web服务器,其源码不仅展示了Servlet容器的基本工作原理,也体现了现代Web服务器的高性能设计思路。对于Java Web开发者来说,深入研究i-jetty源码将有助于...
1. **部署应用**:讲解如何将WAR文件或自定义配置部署到Jetty服务器。 2. **性能调优**:提供性能监控和调优的策略,包括JMX工具的使用。 3. **热部署与自动重启**:了解如何实现代码变更后应用的热部署和自动重启...