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包是定义通用对外远程请求的基本操作。