`
zhaohaolin
  • 浏览: 1012628 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Jetty 服务器架构分析(下)【转】

    博客分类:
  • JAVA
阅读更多

说过了服务器启动,最后来看一下请求处理过程, 服务器启动好后,处于待命状态,请求来了,请求处理过程由分两个建阶段:

  • 请求连接建立过程 ( NIO 为例 )

     前面有提到,从线程池中固定分配了一个线程专门用于等待新连接,就是上图的监听线程,没有请求来时,该线程是阻塞在 accept () 方法上的,当新连接来建立连接时, accept 方法分配了一个 socket ,并将其设置为 nonblocking, 最后要做的就是将该 socket 丢给某个 Acceptor 线程 ( 基本上机会均等 ) 处理,然后立马返回继续处于接受状态,可以这个线程的工作是相当的简单的,效率那也是相当的高。

         Acceptor 线程有很多个 ( 全部来自于线程池,并且固定分配出来,基于 jetty.xml 配置中的 Acceptors 配置数量 ) ,每个线程都维护了一个 SelectSet, 每个 SelectSet 又对应了一个 Selector, 这些线程会检测当前是否有任务来,例如检测 changes 队列中是否有任务,有并且是新连接,那么就迅速建立一个 endpoint 点负责管理这个 socket ,并注册 read 事件,后续该 selector 就会负责该连接的 read 事件监听。

         对于连接很多的情况,这里分很多个 Selector 来分别监听,提高了效率。

  • 请求数据处理过程 ( NIO 为例 )

当数据发送过来时, 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服务器的安装非常简单,通常只需将下载的压缩包(如`jetty-distribution-7.6.5.v20120716`)解压到任意目录即可。解压后的目录包含了所有运行所需文件,包括启动脚本和配置文件。 - 部署Web应用时,只需将...

    jetty 架构

    与许多其他Web服务器不同,Jetty没有采用多层架构,而是采用了基于事件驱动的单线程模型,这使得它在处理高并发请求时表现出色。每个连接都由一个单独的线程负责,避免了线程上下文切换带来的开销,提高了系统性能。...

    Jetty内嵌服务器实例

    1. **Jetty服务器基础**:了解Jetty的基本架构和功能,包括它如何处理HTTP请求和响应,以及如何加载和执行Servlet。 2. **内嵌Jetty的实现**:学习如何通过Java代码创建并启动一个内嵌的Jetty服务器,这通常涉及...

    Jetty 核心架构

    #### 四、Jetty服务器架构 Jetty采用了层次分明的架构设计,便于扩展和维护。其核心架构图如下所示: - **Server**:顶层容器,管理所有组件。 - **Handler**:处理特定的请求。 - **Connectors**:负责建立网络...

    jetty 适合jdk1.8用的服务器

    1. **Jetty服务器核心**:包含了运行Jetty服务器所需的基本组件。 2. **Servlet容器**:支持Servlet 3.1规范,可以处理HTTP请求并分发到对应的Servlet。 3. **配置文件**:如`start.ini`或`jetty.xml`,用于配置...

    应用服务器jetty8.0

    Jetty 8.0是Java应用服务器的一种,主要用于托管Web应用程序。它是一个开源项目,以其轻量级、高效和易于...用户可以通过遵循read-Me.text中的指南来设置和运行Jetty服务器,然后将他们的Web应用部署到这个服务器上。

    Jetty源码分析.pdf

    #### 二、Jetty架构分析 - **总括**:Jetty的核心设计理念在于其简洁高效的架构设计,使得开发者能够在短时间内轻松搭建起Web应用环境。 - **主要组成部分**:Jetty可以大致分为四个主要部分——`HttpServer`、`...

    jetty-6.1.9服务器(2),包含源码

    Jetty服务器的架构设计使其可以轻松地与其他Java库集成,例如Spring框架,这使得开发者能够在不增加太多复杂性的情况下构建复杂的Web应用。它的模块化特性意味着你可以根据需要选择安装和配置特定的服务,如...

    Jetty

    为了方便管理和调试,Jetty提供了一些工具,如`jetty-maven-plugin`,它可以将Maven项目直接部署到Jetty服务器上。此外,还有`jetty-admin`和`jetty-console`等工具,用于远程管理和监控Jetty实例。 ### 《Jetty6_...

    jetty.jar,jetty-sslengine.jar,jetty-util.jar

    这个jar文件包括了Jetty服务器的基本架构,如服务器启动、线程池管理、HTTP连接器、请求处理等。此外,它还支持WebSocket、Continuation和 Comet编程模型,这些都是现代Web应用中的重要特性。 其次,jetty-...

    jetty html5 websocket服务器

    为了在Jetty服务器上部署WebSocket应用,可以将WebSocket端点类打包到一个Java Web应用程序中,并通过Jetty的Web应用部署机制(如`web.xml`配置或使用Jetty的`Server`和`WebAppContext`类)进行部署。 标签"jetty...

    Android平台i-Jetty服务器在智能家居中的应用研究.pdf

    在研究Android平台i-Jetty服务器在智能家居中的应用时,首先需要了解智能家居的基本概念以及它的核心技术——物联网(Internet of Things, IoT)。智能家居系统是一种融合了计算机、通信、控制技术于一体的现代化家居...

    jetty嵌入项目实战

    本实战项目旨在帮助初学者快速掌握Jetty的嵌入式使用方法,通过实例化和配置Jetty服务器,实现Web应用的快速启动和运行。 1. **Jetty简介** - Jetty是一个开源的HTTP服务器和Servlet容器,它遵循Java Servlet和JSR...

    jetty 9.4.9

    4. **jetty-distribution-9.4.9.v20180320.zip**:这是Jetty 9.4.9的完整发行版,包含了运行Jetty服务器所需的所有组件和库。解压后,用户可以找到启动脚本、配置文件以及示例应用程序,帮助快速开始使用Jetty。 在...

    jetty-6.1.26.zip

    总的来说,Jetty 6.1.26虽然相对较老,但它体现了Jetty服务器的核心设计理念和优势,如轻量级、高性能和灵活性。尽管现代开发可能更倾向于使用更新的版本,但对于了解Jetty的历史和原理,以及在某些场景下部署旧项目...

    jetty.rar(clipse/myeclipse/STS等开发工具的jetty插件-通用版本)

    这样,开发工具就能自动识别并加载这个插件,使得你可以在不安装完整Jetty服务器的情况下,直接在IDE内部启动和调试Web应用。 标签中的关键词进一步解释了这个压缩包的内容和用途: 1. "jetty插件包":这是关于...

    spring boot内置jetty

    内置 Jetty 服务器是 Spring Boot 的一个重要特性,允许开发者快速启动和运行 web 应用,而无需手动配置服务器。Jetty 是一个轻量级、高性能的开源 HTTP 服务器和 Java Servlet 容器,它被广泛用于各种类型的 web ...

    jetty-distribution-9.1.0.v20131115

    【标题】"jetty-distribution-9.1.0.v20131115"指的是Jetty服务器的一个发行版本,这个版本发布于2013年11月15日。Jetty是一个开源的、轻量级的Java Web服务器和HTTP服务器,它主要被设计用于快速开发和部署Web应用...

    i-jetty源码

    通过以上分析,我们可以了解到i-jetty作为一款开源的轻量级Web服务器,其源码不仅展示了Servlet容器的基本工作原理,也体现了现代Web服务器的高性能设计思路。对于Java Web开发者来说,深入研究i-jetty源码将有助于...

    jetty6.1.6-2

    在描述中提到的"lib"目录是Jetty的库文件夹,包含了运行Jetty服务器所需的各种依赖JAR文件。这些JAR文件涵盖了Jetty的核心组件、Servlet API、HTTP协议实现、以及其他支持性库,如JSP引擎、WebSocket实现等。理解lib...

Global site tag (gtag.js) - Google Analytics