Netty ByteBuf处理,解码器结构在管道中

时间:2017-06-18 13:02:58

标签: java netty

我的服务器向客户端发送响应或将消息转发给另一个客户端取决于消息内容。 我需要使用8字节消息:大括号之间有6个加密字节,例如:

0x3C 0xE1 0xE2 0xE3 0xE04 0xE5 0xE6 0x3E

其中0x3C表示<标记为开放帧标记,0x3E表示>标志作为关闭帧标记。

如果内部6个加密字节(0xE1 0x02 0x03 0x04 0x05 0x06)成功解密,则数据再次包含相同的标记:

0x3C 0x3C 0x02 0x03 0x04 0x05 0x3E 0x3E

所以我得到4个字节的有效载荷(0x02 0x03 0x04 0x05)。

我已经编写了一个FrameDecoder,但现在我无法决定是否删除大括号字节:

  • 我想编写干净的代码,大括号只是帧标记,因此它们属于FrameDecoder的责任。这对我来说意味着FrameDecoder需要剥离它们。但是在转发时,FrameEncoder需要再次添加它们(在响应编码上)。我可以简单地将结束标记写入缓冲区,但我不知道如何有效地将单字节写入Bytebuf的开头。
  • 如果我不剥离标记,它看起来不是那么干净的解决方案,但我可以转发整个收到的Bytebuf(加密后)或最后一个处理程序可以在响应发送时为整个Bytebuf分配8个字节。

1 个答案:

答案 0 :(得分:1)

我建议你将解密和转换分成两个处理程序。 第一个责任就是解密原始数据。第二种是将原始数据转换为纯消息。这种解决方案的好处是,如果有人想要在以后更改解密方法,他可以只需要更改第一个处理程序而不影响第二个处理程序。同样,转换方法也可以在不影响解密的情况下进行更改。