• Netty 源码 ChannelHandler(三)概述


    Netty 源码 ChannelHandler(三)概述

    Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html)

    ChannelHandler 类图

    一、ChannelInboundHandler 和 ChannelOutboundHandler

    Netty 中的事件分为 Inbound 事件和 Outbound 事件。

    Inbound 事件通常由 IO 线程触发例如 TCP 链路建立事件、链路关闭事件、读事件、异常通知事件。触发 Inbound 事件的方法如下:

    操作 说明
    channelRegistered channel 注册到 eventLoop
    channelUnregistered channel 取消注册
    channelActive channel 连接
    channelInactive channel 失连
    channelRead
    channelReadComplete 读完成
    userEventTriggered 用户自定义事件
    channelWritabilityChanged 写状态改变??
    exceptionCaught 异常

    Outbound 事件通常是由用户主动发起的网络 IO 操作,例如用户发起的连接操作、绑定操作、消息发送等操作。

    操作 说明
    bind 绑定端口
    connect 连接
    disconnect 断开连接
    close 关闭 channel
    read
    write
    flush 刷新
    deregister channel 取消注册

    二、ChannelHandler 功能说明

    ChannelHandler主要编解码类

    2.1 ByteToMessageDecoder 和 MessageToByteEncoder

    将读取到的字节数组或者字节缓冲区解码为业务可以使用的 POJO 对象。为了方便业务将 Bytebuf 解码成业务 POJO 对象,Netty 提供了 ByteToMessageDecoder 抽象工具解码类。

    public MyByteToMessageDecoder extends ByteToMessageDecoder {
        public void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
        }
    }
    

    注意: ByteToMessageDecoder 并没有考虑 TCP 粘包和组包等场景,读半包需要用户解码器自己负责处理。

    MessageToByteEncoder 则相反将 POJO 对象编码成 ByteBuf:

    public MyMessageToByteEncoder extends MessageToByteEncoder {
        public void encode(ChannelHandlerContext ctx, I msg, ByteBuf out) throws Exception {
        }
    }
    

    2.2 MessageToMessageDecoder 和 MessageToMessageEncoder

    将一个 POJO 对象编码成另一个对象,以 HTTP + XML 协议为例,它的一种实现方式是:先将 POJO 对象编码成 XML 字符串,再将字符串编码为 HTTP 请求或者应答消息。对于复杂协议,往往需要经历多次编码,为了便于功能扩展,可以通过多个编码器组合来完成。

    public MyMessageToMessageDecoder extends MessageToMessageDecoder {
        public void decode(ChannelHandlerContext ctx, I msg, List<Object> out) {
        }
    }
    

    2.3 LengthFieldBasedFrameDecoder 和 LengthFieldPrepender


    每天用心记录一点点。内容也许不重要,但习惯很重要!

  • 相关阅读:
    商业研究(10):比呀比-海淘电商-海外正品直邮-高品质跨境购物平台
    商业研究(10):比呀比-海淘电商-海外正品直邮-高品质跨境购物平台
    POJ 2923 Relocation
    ZJU 2425 Inversion
    HDU 1394 Minimum Inversion Number
    POJ 1787 Charlie's Change
    HDU 2191 悼念512汶川大地震
    Gym
    HDU 2069 Coin Change
    UVA 674 Coin Change
  • 原文地址:https://www.cnblogs.com/binarylei/p/10152675.html
Copyright © 2020-2023  润新知