jetty启动时,会执行org.mortbay.jetty.Server.doStart()方法,Server其实就是jetty容器的抽象,doStart()方法会依次启动线程池QueuedThreadPool, handler(处理具体的客户端请求),connectors(监听浏览器请求并把他作为job加入到线程池后续处理)
线程池中有两类线程
第一种是acceptor线程,两个acceptor线程(cpu核心数)持续运行,此线程用来监听客户端请求,主要通过调用connector来完成,具体代码在方法org.mortbay.io.nio.SelectorManager.SelectSet.doSelect(),此方法实现是典型的nio server实现,
else if (o instanceof SocketChannel)
{
final SocketChannel channel=(SocketChannel)o;
if (channel.isConnected())
{
key = channel.register(selector,SelectionKey.OP_READ,null);
SelectChannelEndPoint endpoint = newEndPoint(channel,this,key);
key.attach(endpoint);
endpoint.dispatch();
}
此方法有一段这样的代码,是将客户端的socketchannel加入线程池,这就是线程池中第二种线程
被dispatch到线程池如下
总结下:
jetty启动创建QueuedThreadPool,handler,connector
QueuedThreadPool里面会放入acceptor线程同时初始化其他用来处理后续具体请求的线程,也就是执行handler
acceptor线程最先开始运行,初始化服务端的ServerSocketChannel在connector中,然后接受客户端SocketChannel并放入线程池,由业务线程交由handler处理下去
分享到:
相关推荐
Jetty源码分析.pdf
这是i-jetty源码,在google code上也有,需要用maven编译后执行
jetty源码剖析,通过此文档可以了解Jetty的实现原理和阅读底层代码。
jetty 源码 zip github 最近真坑 下载好慢 留点资源 给需要的人 一块学习吧
jetty svncheckout出来的,方便大家查阅。
分析jetty技术的必备工具
jetty 嵌入式开发源码
jetty源代码下载 jetty源代码下载 jetty源代码下载 jetty源代码下载
Jetty嵌入项目代码中示例,现我有一示例项目 e:/workspace/web-demo(称为project_home),里面的Web根目录是WebContent。 在project_home建一个jetty目录,子目录如:contexts、etc、lib。 把${jetty_home}/etc...
camunda-bpm-jetty-源码.rar
i_jetty安卓端源码
jetty-6.1.26源代码
内容太大,故分开为两个文件,使用时合并为一个文件即可
OSGI-Jetty示例,Java源码,很得劲
eclipse的jetty插件网上大多数只能支持到8的版本,Jetty插件的源码。里面包含了Jetty6.X,Jetty7.X,Jetty8.X,Jetty9.X等版本的源码。
由于内容太大,故分开压缩,将两个文件合并在一起即可
摘要:原创出处
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....
安卓版服务器i-jetty,包括i-jetty的jar包和安装jetty的源码
eclipse + maven多模块项目框架 + jetty热部署的实例源码 让你掌握maven中那些令人迷惑的一堆配置,基于此框架快速搭建maven多模块项目完美环境。