package unpacker // Unpacker 拆包器接口 type Unpacker interface { // Unpack 拆包 // data: 原始数据 // 返回: 完整的消息列表, 剩余数据, 本次从输入data中消耗的字节数, 错误 // consumed: 本次从输入data中消耗的字节数,用于准确计算从gnet buffer中需要discard的数据量 Unpack(data []byte) ([][]byte, []byte, int, error) // Pack 打包 // data: 要打包的数据 // 返回: 打包后的数据, 错误 Pack(data []byte) ([]byte, error) } // 默认最大buffer大小(10MB) const DefaultMaxBufferSize = 10 * 1024 * 1024 // FixedLengthUnpacker 固定长度拆包器 type FixedLengthUnpacker struct { Length int MaxBufferSize int // 最大buffer大小,0表示使用默认值 } // LengthFieldUnpacker 长度字段拆包器 type LengthFieldUnpacker struct { LengthFieldOffset int // 长度字段偏移 LengthFieldLength int // 长度字段长度(1, 2, 4, 8) LengthAdjustment int // 长度调整(长度字段值 + 调整值 = 实际长度) InitialBytesToStrip int // 需要跳过的初始字节数 MaxBufferSize int // 最大buffer大小,0表示使用默认值 } // DelimiterUnpacker 分隔符拆包器 type DelimiterUnpacker struct { Delimiter []byte MaxBufferSize int // 最大buffer大小,0表示使用默认值 } // FrameHeaderUnpacker 帧头拆包器 type FrameHeaderUnpacker struct { HeaderLength int // 帧头长度 GetLength func(header []byte) int // 从帧头获取消息长度 MaxBufferSize int // 最大buffer大小,0表示使用默认值 }