Jetty9源码剖析 - Server组件

转载自ph0ly:http://www.ph0ly.com

一、概念

Server是Jetty框架里面最核心的组件之一,它是一个大容器,将其他组件,如Connector、Connection、Handler直接或间接地关联到自己的容器内,所有关联的组件,生命周期都由它掌控,可以理解它就是Jetty容器的大老板

二、继承体系

继承图

Server继承了HandlerWrapper,它是一个Handler,并且是专门用于包装Handler的容器,并具有容器的生命周期

三、总体架构

架构图

借用之前总体架构中的图,我们可以看到启动首先从Server开始,Server会把容器中的其他具有生命周期的组件全部启动,启动完成后,每个组件各自干活,而当一个请求解析完成后,HttpChannel会调用Server.handle来处理,而Server作为一个HandlerWrapper,就会拿着之前设置进来的Handler来处理本次的请求,也就是流程图中的箭头指向,这样层层调用,最后到了应用层

四、源码剖析

1. 创建

创建

构造函数还是比较简单,如果没指定一些参数,例如线程池没指定,就使用Jetty自身提供的QueuedThreadPool(qtp),如果指定的是IP或端口,就会创建ServerConnector,并将该组件关联到Server

2. 启动

启动-1

启动-2

前面会做一些校验,所有Connector的下的Selector总数量不能超过最大线程池大小,然后调用super.doStart启动父类中的具有生命周期的组件,包括qtp、handler等等

下面手动触发所有connector的启动,可以看到Server的启动逻辑没什么特别的,Jetty实现了一套自己的IOC容器,利用LifeCycle的定义来托管对象,这样在代码层面看起来更加清晰,不过调试上就比较麻烦了

3. 处理请求

处理

可以看到逻辑非常简单,直接拿到HttpChannel中的Request、Response调用Server自身的HandlerWrapper继承过来的handle方法,这个方法会调用包装的Handler的handle方法处理(不清楚的读者,可以看下后面Handler的概述章节)

五、总结

从上面的分析可以看出,Server其实就没干啥事,但是它相当于一个大老板,将所有的资源整合起来,将每个模块的组件启动起来,并管理它们的生命周期,同时协助HttpChannel完成后续Handler的触发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值