`
dawuafang
  • 浏览: 1105694 次
文章分类
社区版块
存档分类
最新评论

谈谈jetty response模型

 
阅读更多

1)jetty 响应的概念模型


  • SelectChannelEndPoint: 底层的socket的封装,代表每次请求对应的网络连接(偏网路底层)
  • AsyncHttpConnection:代表每次连接(偏上层一点),管理相关的request,response,HttpParser,HttpGenerator实例
  • HttpParser:请求解析
  • HttpGenerator:负责最终的response生成
  • Response:不解释
  • Request:不解释
  • JettyServer: servlet容器,负责处理servlet相关逻辑

2)请求的实例化


  • ​select线程感知到网络请求于是开始初始化途中的各个相关类的实例
  • 最后将请求封装成一个endpoint实例丢入worker线程的队列中的等待处理

3)jetty 整体的响应流程



  • worker线程从请求队列获取请求
  • 请求(底层是个SelectChannelEndPoint)开始处理
  • SelectChannelEndPoint调用相关的AsyncHttpConnection进行处理
  • AsyncHttpConnection调用HttpParser解析请求
  • AsyncHttpConnection调用servlet容器处理请求(真正的业务处理)
  • servlet处理完毕处理,AsyncHttpConnection开始调用Response处理响应

4)在servlet中调用write/flush的底层实现

样例代码:

PrintWriter out = response.getWriter();
out.write(request.getParameter("id"));
out.flush();


  • servlet中调用write底层会调用HttpGenerator的addContent方法
  • addContent会将内容填充到HttpGenerator的_content,_content内容会被拷贝到内部buffer,如果超过内部buffer的长度就会自动flush
  • servlet中调用write底层会调用HttpGenerator的flushBuffer,此操作会触发真正的网络流,下一节会具体谈

5)Response.complete到底干了什么


  • 调用AsyncHttpConnection的completeResponse
    • 调用HttpGenerator生成header内容
    • 调用HttpGenerator生成content内容
  • 一旦reponse header和response content完成,开始flush
  • 会将header buffer和content buffer传入SelectChannelEndPoint的gatheringFlush做矢量IO
  • 最终还是调用底层socket完成网络响应

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    jetty相关的全部jar包

    jetty-security-9.4.8.v20171121.jar,jetty-io-9.4.8.v20171121.jar,jetty-continuation-9.4.8.v20171121.jar,jetty-client-9.4.8.v20171121.jar,jetty-jmx-9.4.8.v20171121.jar,jetty-plus-9.4.8.v20171121....

    eclipse jetty插件run-jetty-run-1.3.3

    eclipse jetty插件,从...下载run-jetty-run.zip文件,解压后再编写个links文件丢到eclipse的dropins目录下即可,省去了使用eclipse update方式安装的麻烦。 link文件样例如: path=d:\\eclipse_plugins\\run-jetty-run

    Jetty多版本软件包

    Jetty软件包内容: jetty-distribution-9.4.51.v20230217.tar.gz jetty-distribution-9.4.51.v20230217.zip jetty-home-10.0.15.tar.gz jetty-home-10.0.15.zip jetty-home-11.0.15.tar.gz jetty-home-11.0.15.zip ...

    jetty6 指南书

    jetty是什么 jetty配置 jetty使用 jetty嵌入 jetty启动 jetty部署 jetty教程 jetty嵌入式 jetty

    PDF的JETTY文档

    .jetty

    jetty嵌入式服务器必须的jar包

    jetty嵌入式服务器开发所必须的jar包,本人使用jetty版本为6.1.3,jar包总数为9个,来自jetty:commons-el-1.0.jar,jasper-compiler-5.5.15,jasper-compiler-jdt-5.5.15.jar,jasper-runtime-5.5.15.jar,jetty-...

    jetty-9.4.6

    jetty-9.4.6

    jetty相关所有jar包

    jetty相关所有jar包,包含jar包: jetty-continuation-8.1.15.v20140411,jetty-http-8.1.15.v20140411,jetty-io-8.1.15.v20140411,jetty-security-8.1.15.v20140411,jetty-server-8.1.15.v20140411,jetty-util-8.1.15...

    Jetty配置支持https

    Jetty配置支持HTTPS以及受信网站证书生成方式

    jetty 学习资料合集

    jetty 学习资料合集 jetty 学习资料合集 jetty 学习资料合集 jetty 学习资料合集

    maven集成jetty所需jar包maven-jetty-plugin,多版本

    maven集成jetty必须jar包maven-jetty-plugin,内含多个版本

    Jetty cometd(Continuation)学习笔记

    Jetty 7是Jetty奔向Eclipse后发布的第一个版本,本次的Jetty 7 RC2带给了我们一个十分诱人的新特性-支持跨域名Ajax请求。众所周知因为安全的原因,多数浏览器都限制了Ajax跨域请求和javascript加载的时候只能是与...

    i-jetty libs包

    android i-jetty servlet-api-2.5.jar jetty-servlet-7.6.0.RC4.jar jetty-server-7.6.0.RC4.jar jetty-http-7.6.0.RC4.jar

    jetty 9.2.24

    jetty服务器,9.2版本适合java7+开发环境。 Jetty是一个纯粹的基于Java的网页服务器和Java Servlet容器。 尽管网页服务器通常用来为人们呈现文档,但是Jetty通常在较大的软件框架中用于计算机与计算机之间的通信。 ...

    Jetty嵌入项目代码中示例

    Jetty嵌入项目代码中示例,现我有一示例项目 e:/workspace/web-demo(称为project_home),里面的Web根目录是WebContent。 在project_home建一个jetty目录,子目录如:contexts、etc、lib。 把${jetty_home}/etc...

    jetty源代码下载

    jetty源代码下载 jetty源代码下载 jetty源代码下载 jetty源代码下载

    Jetty9 配置使用HTTPS证书

    Jetty9 配置使用HTTPS证书,访问你的服务器更安全,更好的配置方法。

    jetty 9.4.9

    jetty 9.4.9, jetty 容器是轻便型容器,启动速度的确可以 ,附带有servlet-api.jar 和jsp-api.jar 两个jar包

    Jetty中文手册

    安全模型(Secure Mode) 存储在文件中的安全密码以及编程教程 如何开启或禁止Jetty中的SSL功能 如何在Jetty中安全存储密码 如何安全终止Jetty 如何配置Spnego Application Server Integrations(集成) Apache ...

    jetty的安装与使用

    jetty

Global site tag (gtag.js) - Google Analytics