
jetty
文章平均质量分 81
jetty
chuixue24
这个作者很懒,什么都没留下…
展开
-
《深入拆解Tomcat&Jetty》总结六:关于性能的设计
8 Jetty的线程策略EatWhatYouKillJetty总体架构设计:Connector:ManagedSelector在线程策略方面的做法:将I/O事件的侦测和处理放到同一个线程来处理,充分利用了CPU缓存并减少了线程上下文切换的开销。这种名为“EatWhatYouKill”的线程策略将吞吐量提高了8倍8.1 Selector常规思路常规的NIO编程思路是,将I/O事件的侦测和请求的处理分别用不同的线程处理。具体过程是:启动一个线程,在一个死循环里不断地调用se转载 2022-03-11 18:05:03 · 380 阅读 · 0 评论 -
《深入拆解Tomcat&Jetty》总结四:Jetty架构解析
6 Jetty架构Jetty更加小巧,更易于定制化6.1 整体架构简单来说,Jetty Server由多个Connector(连接器)、多个Handler(处理器),以及一个线程池组成。Connector组件和Handler组件分别来实现HTTP服务器和Servlet容器的功能;这两个组件工作时所需要的线程资源都直接从一个全局线程池ThreadPool中获取。Jetty Server可以有多个Connector在不同的端口上监听客户请求,而对于请求处理的Handler组件,也.转载 2022-03-11 15:09:13 · 716 阅读 · 0 评论 -
Jetty9源码剖析 - Connection组件 - HttpConnection
一、概念Connection是一条逻辑连接,主要完成Http请求的解析以及通知后续处理。在Jetty中,它需要配合EndPoint来完成任务,EndPoint在IO事件发生时回调Connection的回调函数,从而触发Connection的数据处理。对于HTTP/1.x的版本,使用HttpConnection来处理,而对于HTTP/2,则使用Http2Connection来处理二、继承体系HttpConnection实现了HttpTransport接口,HttpTransport主要是.转载 2022-01-30 15:06:46 · 434 阅读 · 0 评论 -
Jetty9源码剖析 - Connection组件 - SelectChannelEndPoint
一、概念EndPoint表示一个逻辑上的传输端点,数据的读取和写入都是从端点开始,配合回调机制(当读操作发生时可以通知到回调函数,而写操作也提供回调机制,当完成写入后,调用写回调函数),可以完成异步处理的。端点的实现通常具有超时的特性,在端点未产生任何读写的情况下,超时机制可以保证EndPoint关闭(包括关联的Channel或其他资源),避免一些资源的浪费。SelectChannelEndPoint是其中一种实现,能支持NIO任务生产逻辑的实现二、继承体系我们看到整个继承体系还是非常.转载 2022-01-30 13:47:34 · 363 阅读 · 0 评论 -
Jetty9源码剖析 - Connection组件 - 概述
一、概念Connection组件就是Jetty里面逻辑连接,和一条持久的物理连接保持一致。前面说到过Connector组件是通信层组件,这里Connection在通信层上面的协议层,主要完成HTTP协议的解析、响应的处理,为Handler的处理做好前期的准备二、继承体系可以看到继承体系还算是比较简单,其中HttpConnection就是我们的核心HTTP/1.x的处理的类,对于HTTP协议的处理,他会利用HttpParser、HttpGenerator完成协议的解析和响应报文的生成,另外Re转载 2022-01-28 18:57:35 · 170 阅读 · 0 评论 -
Jetty9源码剖析 - Connector组件 - EPC(ExecuteProduceConsume)
一、概念对于常规的IO操作来说,通常我们会拿一个线程作为生产者,阻塞在select调用上面,等待新的IO事件,当IO到来时,生产者将该事件以及一些数据包装起来放到队列,另一个线程去消费这些事件,然后根据事件类型处理,这样解耦了事件的生产与消费,让IO事件生产和IO事件消费互不阻塞,这种模式在Jetty任务执行模型里面称为ProduceExecuteConsume(简称PEC)。这样确实带来了很多好处,不过对于大量的IO操作来说,例如读事件,这时候唤醒select,说明内核态已经处理完成了,CPU的某个核转载 2022-01-28 09:11:02 · 343 阅读 · 0 评论 -
Jetty9源码剖析 - Connector组件 - ManagedSelector
一、概念ManagedSelector是一个托管的Selector,它包装了NIO中的Selector,并在内部完成select事件监听处理二、继承体系可以看到ManagedSelector是具有生命周期的,继承体系比较简单三、总体架构图中绿色表示ManagedSelector相关的组件,其中EPC内绿色部分属于ManagedSelector内部的类SelectorProducer,ManagedSelector启动的时候会运行ExecutionStrategy.execute,转载 2022-01-27 17:53:40 · 271 阅读 · 0 评论 -
Jetty9源码剖析 - Connector组件 - SelectorManager
一、概念SelectorManager是选择器管理器,它主要完成连接接入时的Selector选择,以及控制ManagedSelector完成一系列的操作(例如EndPoint和Connection的创建,以及读写事件的注册)二、继承体系通常我们用的是ServerConnectorManager,ServerConnectorManager会完成一些简单的操作,大部分核心逻辑还是在SelectorManager。可以看到SelectorManager是具有生命周期的三、总体架构.转载 2022-01-27 17:11:32 · 326 阅读 · 0 评论 -
Jetty9源码剖析 - Connector组件 - ServerConnector
一、概念Connection组件就是Jetty里面逻辑连接,和一条持久的物理连接保持一致。前面说到过Connector组件是通信层组件,这里Connection在通信层上面的协议层,主要完成HTTP协议的解析、响应的处理,为Handler的处理做好前期的准备二、继承体系可以看到继承体系还算是比较简单,其中HttpConnection就是我们的核心HTTP/1.x的处理的类,对于HTTP协议的处理,他会利用HttpParser、HttpGenerator完成协议的解析和响应报文的生成,另外R.转载 2022-01-27 16:02:01 · 935 阅读 · 0 评论 -
Jetty9源码剖析 - Connector组件 - IO模型
一、多路复用IO在开始正式Jetty IO模型分析前,让我们一起来回顾下IO多路复用模型IO多路复用也称为事件驱动IO,它通过select(poll、epoll)阻塞调用,当有某个注册的事件发生时,会唤醒用户线程。它利用单个线程就能完成一系列IO操作,相比于传统的阻塞多线程模型来说优点很明显,不需要占用大量线程、更少的CPU占用。不过本质上来说,它仍然是阻塞IO,当事件发生时,用户线程需要执行read、write、accept操作,也就是说该模型是同步非阻塞IO二、Java NIONI.转载 2022-01-27 15:55:26 · 592 阅读 · 0 评论 -
Jetty9源码剖析 - Server组件
一、概念Server是Jetty框架里面最核心的组件之一,它是一个大容器,将其他组件,如Connector、Connection、Handler直接或间接地关联到自己的容器内,所有关联的组件,生命周期都由它掌控,可以理解它就是Jetty容器的大老板二、继承体系Server继承了HandlerWrapper,它是一个Handler,并且是专门用于包装Handler的容器,并具有容器的生命周期三、总体架构借用之前总体架构中的图,我们可以看到启动首先从Server开始,Server会把转载 2022-01-27 15:04:19 · 503 阅读 · 0 评论 -
Jetty9源码剖析 - 总体架构
一、概述Jetty作为高性能Web服务器,它的架构相比于Tomcat要简单很多,组件抽象更简洁,接下来我们就来看下二、架构上图中,绿色部分是Jetty开放给开发者使用的;浅橙色表示JDK或Servlet规范定义的(或开发者实现的),不属于Jetty自身实现;蓝色部分表示Jetty内部实现的一些组件,不对外暴露上图基本展示了数据交互的整体流向,我们下面从组件的生命周期来分析这些操作的交互1. 启动我们首先看下Jetty官方给我们的例子开发者首先创建一个Serve..转载 2022-01-27 14:54:15 · 1095 阅读 · 0 评论 -
Jetty9源码剖析 - Connector组件 - 概述
一、概念Connector组件是Jetty整个通信层的实现,通过利用多组件间的协作完成连接的接受、读、写的操作。整个底层实现依赖于Java NIO配合回调函数,打造了一套Jetty特色的通信框架。NIO帮助其完成基础通信,而回调则是通知下游组件进行下一步处理二、继承体系可以看到Connector侧的组件,继承体系还是相对简单的,不过在解析来的文章Connector不只是以Connector命名的组件,而是包含一些和Connector直接协作的组件,例如EndPoint、EPC等组件。通过它们转载 2022-01-27 14:48:26 · 240 阅读 · 0 评论 -
Jetty9源码剖析 - 设计规范
概述Jetty在设计各个组件类时,都遵守大量的规范,这样整个Jetty源码是高度规范的具体规范骨架抽象类:为每个组件接口实现一个基础的骨架类,将一些公用的操作抽象到上层,复用代码(如AbstractHandler、AbstractConnector) 模板方法:对于骨架抽象类中未知的实现,但是需要调用的操作,使用模板方法,让子类自行实现(如AbstractLifeCycle,将doStart、doStop具体实现由子类可重写;ScopedHandler,将doScope、doHandle交由子转载 2022-01-27 14:45:32 · 164 阅读 · 0 评论 -
http状态码301和302的区别
定义如下:301 Moved Permanently 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。302 Found 请求的资源现在临时从不同的URI响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发...转载 2019-04-18 10:51:22 · 208 阅读 · 0 评论