基于Netty实现高性能通信程序之传输协议编码与解码
1、协议抽象实体
1 package protocal.model; 2 3 import lombok.Data; 4 5 /** 6 * @author liupengr 7 * @date 2020/2/12 18:21 8 */ 9 @Data 10 public abstract class AbstractProtocalEntity { 11 12 /** 13 * 获取序列化工具由子类实现 14 * 15 * @return 16 */ 17 public abstract Byte getSerializerType(); 18 19 /** 20 * 获取操作指令 21 * @return 22 */ 23 public abstract Byte getCommand(); 24 25 /** 26 * 协议版本号 27 */ 28 private Byte version = 1; 29 30 31 }
2、业务操作实体(信息传递)
1 package protocal.model; 2 3 import lombok.AllArgsConstructor; 4 import lombok.Data; 5 import lombok.EqualsAndHashCode; 6 import lombok.NoArgsConstructor; 7 import serializer.service.SerializerEnum; 8 9 /** 10 * 消息传输实体 11 * 12 * @author liupengr 13 * @date 2020/2/12 18:38 14 */ 15 @Data 16 @NoArgsConstructor 17 @AllArgsConstructor 18 @EqualsAndHashCode(callSuper = true) 19 public class MsgEntity extends AbstractProtocalEntity { 20 21 /** 22 * 序号:TCP 连接它是一个全双工的通道,同时进行数据的双向收发,此时就需要序号来使请求和响应对应 23 */ 24 private Integer num; 25 26 /** 27 * 会话ID 28 */ 29 private Integer session; 30 31 /** 32 * 用户ID 33 */ 34 private Integer userId; 35 36 /** 37 * 内容 38 */ 39 private String content; 40 41 /** 42 * 得到当前传输实体的编码格式 43 * 44 * @return 45 */ 46 @Override 47 public Byte getSerializerType() { 48 return SerializerEnum.PROTOSTUFF.getCode().byteValue(); 49 } 50 51 /** 52 * 获取当前传输实体的操作标识 53 * 54 * @return 55 */ 56 @Override 57 public Byte getCommand() { 58 return Contrast.Msg; 59 } 60 61 }