`
talin2010
  • 浏览: 520773 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

Jetty 服务器架构分析(下)

阅读更多

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

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

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

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

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

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

当数据发送过来时,Selector检测到read事件,会立马调用endpointschedule()方法,该方法目的就是从线程池分配一个worker线程专门来处理这个read事件,而自己却立马返回继续监听,可见,这里也是一个高效的处理方式。

业务线程分配成功后,负责请求的读取以及解析,如果请求是完整的,那么就开始调用Serverhandle方法(server本身就是一个handler),开始handler的处理,最后调用到SerlvetHandler,最终交给ServletFilter,开始了我们的自己应用。

后记

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-...

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

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

    jetty html5 websocket服务器

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

    jetty-6.1.26官方正式版本.zip

    - **jetty.sh**:这是一个启动脚本,用于在Unix/Linux环境下启动Jetty服务器。 - **run**:可能包含的是启动和配置Jetty服务器的相关脚本或配置文件。 - **patches**:此目录可能包含针对该版本的修复补丁或者...

    jetty嵌入项目实战

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

    jetty-6.1.26.zip

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

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

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

    jetty-distribution-9.1.0.v20131115

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

    spring boot内置jetty

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

    run-jetty-run.rar

    在"run-jetty-run"插件中,它会描述如何将Jetty集成到Eclipse的工作流中,比如创建和管理Jetty服务器实例的菜单项和快捷方式。 2. **icons**: 此目录包含了插件在Eclipse界面中使用的图标,例如启动、停止Jetty...

    jetty9.4.6 2017最新 免费下载

    3. **Jetty Util**:jetty-util-9.4.6.v20170531.jar包含了一些通用工具类和方法,用于辅助Jetty服务器的其他组件。 4. **Web应用程序支持**:jetty-webapp-9.4.6.v20170531.jar提供了对Web应用程序的部署和管理,...

Global site tag (gtag.js) - Google Analytics