Netty 自定义协议实战

本文介绍了一个基于Netty的自定义RPC协议实现案例,包括协议定义、序列化工具类、编码器、解码器及协议处理器的设计与实现。通过客户端和服务端的交互演示了协议的有效性。

Netty 自定义协议实战

依赖

<dependency>
  <groupId>io.netty</groupId>
  <artifactId>netty-all</artifactId>
  <version>4.1.50.Final</version>
</dependency>
<dependency>
  <groupId>com.caucho</groupId>
  <artifactId>hessian</artifactId>
  <version>4.0.63</version>
</dependency>

协议

/**
 * 常量
 */
public interface RpcProtocolConst {
   
   
    /**
     * 协议开始标识
     */
    int HEAD_START = 0x177;
}

@Getter
@Setter
public class RpcProtocol implements Serializable {
   
   
    private static final long serialVersionUID = 42L;
    /**
     * 协议开始标记
     */
    public final int start = RpcProtocolConst.HEAD_START;
    /**
     * header 长度
     */
    private int headerLength;
    /**
     * header
     */
    private RpcProtocolHeader header;
    /**
     * body 长度
     */
    private int bodyLength;
    /**
     * body
     */
    private byte[] body;
}

/**
 * 协议头
 */
@Getter
@Setter
public class RpcProtocolHeader implements Serializable {
   
   
    private static final long serialVersionUID = 42L;
    /**
     * 请求id
     */
    private String id;
    /**
     * 版本号
     */
    private String version;
}

序列化工具类

public class HessianUtils {
   
   
    public static <T> T read(byte[] data, Class<T> clazz) {
   
   
        ByteArrayInputStream os = new ByteArrayInputStream(data);
        Hessian2Input input = new Hessian2Input(os);
        try {
   
   
            return (T) input.readObject(clazz);
        } catch (IOException e) {
   
   
            e.printStackTrace();
        } finally {
   
   
            try {
   
   
                input.close();
            } catch (IOException e) {
   
   
                e.printStackTrace();
            }
        }
        return null;
    }

    publi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值