dubbo源码

remote root:
定义基本网络通信模型:
  endpoint为一个网络节点
  channel为一条通信链路,区分本地和远端。只有发送到通道的操作。
  channelhandler定义channel变化时的处理器,比如通道有数据发送、数据接受、连接通道、断开连接通道时做什么处理
  dispatcher负责对channelhandler类型的分配,根据url里的定义决定使用哪种channelhandler
  transporter抽象底层不同网络通信框架的绑定和连接基本操作
  client基本客户端操作,目前只有重连
  remoteserver基本服务端操作,判断是否绑定和获取和服务端建立连接的channel列表
transport root:
  定义server和client的基本操作以及多消息、解码消息的channelhandler
transport dispatcher:
  定义各种不同线程分配策略的channelhandler
exchange root:
  定义通信的request、response模型:
    exchangechannel可以异步发送请求且获取响应的通道
    exchangeserver定义在exchange层的server,主要表现是跟exchangechannel关联,跟channel没有关系了。
    exchangeclient定义exchange层的client,拥有exchangechannel的请求响应功能。
    exchanger类似于transport层的transporter,只不过exchanger是定义在exchange层,表现为跟exchangeclient和exchagneserver关联,跟client和remoteserver没有关系
    exchangehandler额外定义了replay方法,不知道是有啥用 @todo:

    request定义请求的基本属性

    response定义response基本属性

exchange support root:

  exchange层需要的辅助类:

     defaultfuture获取异步执行结果的容器类

     exchangehandlerdispatcher封装了transport层的channelhandler、exchangehandler层的replay、telnet handler

exchange support header:

  exchange层的具体实现:

    headerexchange实现exchange层的绑定和连接

    headerexchangechannel实现exchangechannel的异步消息发送

    abstracttimertask定义异步任务

buffer:

  定义缓存容器以及基于缓存容器的输入输出流

    channelbuffer定义缓存操作接口

    abstractchannelbuffer定义缓存容器基本属性

    bytebufferbackedchannelbuffer是基于jdk的bytebuffer做的缓存容器

    heapchannelbuffer是基于堆内存的缓存容器

    channelbufferinputstream和channelbufferoutputstream是基于缓存容器的输入输出流

    channelbufferfactrory缓存容器工厂

以上是remote包api的功能描述,在remote下其他具体通信包有的实现了api里的接口,有的是完全独立的接口,比如netty、netty4、http都是实现了api的接口,但是redis、zookeeper并没有实现接口,不知道这是待优化的点还是就是要这么设计。

总而言之,remote包是定义通用对外远程请求的基本操作。

      

posted @ 2021-06-02 21:58  Birding  阅读(55)  评论(0编辑  收藏  举报