49

Jetty源码剖析系列(7) - 底层网络通信的细节

 7 years ago
source link: http://ericcenblog.com/2018/04/16/jettyyuan-ma-pou-xi-xi-lie-7-di-ceng-wang-luo-tong-xin-de-xi-jie/?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
我们先来回顾一下Jetty负责网络连接的类ServerConnector的构造函数: 可以看到在ServerConnector的构造函数里会创建一个SelectorManager,然后加到它的bean里面(这里其实体现了Jetty的一个设计模式,就是设计了一个containner,把相关的模块放到这个containner里面,启动该container(调用doStart方法)就会连带启动里面的模块(调用模块的doStart方法), Jetty里面的Server,Connector都是这样的containner。) 我们再来看newSelectorManager方法: 就是创建一个ServerConnectorManager对象,ServerConnectorManager继承了SelectorManager类: ,我们再看一下SelectorManager的doStart方法: 可以看到在调用父类的doStart方法之前,会创建ManagedSelector,并将该selector加到SelectorManager的bean里面,随后再在调用父类的doStart方法时调用该selector的doStart方法,注意selector的数目是根据CPU的数量计算出来的, newSelector方法其实就是直接构建一个ManagedSelector对象: 我们看一下ManagedSelector的构造函数: 关于ManagedSelector,我在系列(4)里面已经有详细剖析。 此时我们先回过头去看一下ServerConnector的doStart方法: 它先调用open方法打开ServerSocketChannel,这个我在系列(6)里面有详细剖析。我们这里关注一下它调用的父类的doStart(AbstractConnector)方法: 它先调用了父类ConntainnerLifeCycle的doStart方法将它所拥有的bean(模块)都启动起来,其中就包括了我们前面加进去的SelectorManager,随即也就会把SelectorManager里面的ManagedSelector启动起来(调用它的doStart方法)。到此,我们可以看到ServerConnector会先启动Selector,然后再启动Acceptor。Connector,Selector,Acceptor,这三者的关系我画了下图来说明: 从上图可以看到,Acceptor负责接收网络连接,

Recommend

  • 103
    • dev.eclipse.org 7 years ago
    • Cache

    [jetty-announce] Jetty 9.4.7 Released!

    [jetty-announce] Jetty 9.4.7 Released!Skip to main content [

  • 62
    • dev.eclipse.org 7 years ago
    • Cache

    [jetty-announce] Jetty 9.4.8 Released!

    [jetty-announce] Jetty 9.4.8 Released!Skip to main content [

  • 34

    引子: 在 dubbo剖析:二 服务引用 中,我们讲到了RegistryProtocol.refer过程中有一个关键步骤,即在监听到服务提供者url时触发RegistryDirectory.notify()方法。 RegistryDirectory.notify()方法调用refreshInvoker()方法将服务提供者urls转换为对应的远程invoke...

  • 74

    注:文章中使用的dubbo源码版本为2.5.4 零、文章目录 Dubbo的网络分层抽象 Dubbo如何保证Client端与Server端的连通性 Dubbo的请求响应模式,如何将异步IO变为同步RPC Dubbo线程模型总结 一、Dubbo的网络分层抽象 上图为Dubbo整体设计的分层抽象。 网络通信位于Remo...

  • 51

    在之前的文章中已经介绍过单主机Docker容器的网络互联,但是实际生产中我们很多时候都是多台主机部署Docker环境,且每台主机上都运行数量不等的容器,如果需要这些容器共同提供服务,就需要解决跨主机容器间的网络通信问题,所以这里就来记录一下常用的跨主机容器...

  • 31

    The Issue The Eclipse Jakarta EE project has not obtained the rights from Oracle to extend the Java EE APIs living in the javax.* package. As such, the Java community is faced with a choice between continuing to...

  • 9
    • hub.docker.com 4 years ago
    • Cache

    jetty docker image 镜像

    ``` docker pull jetty ``` # Quick reference - **Maintained by**: [the Docker Community](https://github.com/eclipse/jetty.docker) - **Where to get help**: [the Docker Community Forums](https://forums.docker.com/), [the Docker Communit...

  • 11

    在分布式架构中,网络通信是底层基础,没有网络,也就没有所谓的分布式架构。只有通过网络才能使得一大片机器互相协作,共同完成一件事情。 同样,在大规模的系统架构中,应用吞吐量上不去、网络存在通信延迟、我们首先考虑的都是网络问题,因此网络的...

  • 4

    我们常见的并发锁ReentrantLock、CountDownLatch、Semaphore、CyclicBarrier都是基于AQS实现的,所以说不懂AQS实现原理的,就不能说了解Java锁。 上...

  • 4

    我们常见的并发锁ReentrantLock、CountDownLatch、Semaphore、CyclicBarrier都是基于AQS实现的,所以说不懂AQS实现原理的,就不能说了解Java锁。上篇文章讲了AQS的加锁流程,这篇文章再一块看一下AQS具体源码实现。先回顾一下AQS的加锁流程

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK