codec

AbstractEndpoint 这个类 是所有client和Server的抽象父类,内部有个编码器codec通过这个来序列化和反序列化

查看构造器发现codec通过url来获取的

看过上面spi的话,应该就很容易了解dubbo的codec编码器机制

dubbo默认一般使用dubbo协议,直接观看DubboProtocol类

  • 查看createServer

  • 发现url参数设置的CODE_KEY为DubboCodec.NAME

所以可以推测dubboCodec是dubbo解码器和编码器,查看内部实现

DubboCountCodec

  • 内部持有dubbocodec

  • 主要讲下序列化,发现内部有个CodecSupport

  • 内部核心调用getSerialization

  • 也是通过spi机制,不过有个缓存已经预加载了所有序列化工具

  • body序列化默认是hession2

dubbo请求结构

  • 请求头HEAD_LENGTH:16字节

    • MAGIC 0xdabb 2字节

    • flag

      • 高位

        • 0x20 FLAG_EVENT

        • 0x40 FLAG_TWOWAY

        • 0x80 FLAG_REQUEST

      • 低位

        • 序列器id

    • 响应状态status 1字节,枚举查看response类

    • 请求id 8字节

    • DATA_LENGTH offSet 4字节

  • 解析body,通过CodecSupport序列化

CodecSupport

  • 里面的通过序列器id寻找序列化工具

  • 查看方法可以发现使用默认hession2序列工具

Last updated