先看使用的地方,dubbo协议底层使用netty进行tcp通信,netty提供了报文encode和decode的接口,可以看nettyserver构建server的地方:
在创建netty server的时候会通过调用getCodec方法获取dubbo对应的codec实现类。dubbo codec实现类的层级结构如下:
TransportCodec已经废弃不用,所有的方法在TelnetCodec和ExchangeCodec中都已经被覆写。从上往下看:
Codec2接口定义了encode和decode方法,这两个方法都会依赖ChannalBuffer接口,ChannelBuffer主要实现了缓存的目的,为了在encode和decode的时候做数据临时存储。
AbstarctCodec主要定义了检查payload的逻辑还有获取序列化组建,在整个codec模块里底层都是依赖序列化组建来做最后的数据序列化和反序列化,codec模块主要完成的是请求和响应自定义格式的解析,比如请求头、响应头。
TelnetCodec主要定义的是telnet协议的内容。 todo:
ExchangeCodec定义了通用的请求头和响应头解析逻辑。
DubboCodec在ExxhangeCodec的基础上在请求体和响应体中再加入了dubbo特有的相关参数。