2017-06-18 100 views
0

我的服务器向客户端发送响应或将消息转发给另一个客户端取决于消息内容。 我需要使用8级字节的消息:括号之间6个加密字节,例如:Netty ByteBuf处理,管道中的解码器结构

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

当装置为0x3C符号<作为开口帧标记,和0x3E的装置>符号作为闭合帧标记。

如果内部6个加密字节(0×02 0xE1 0x03时0×04 0×05 0×06)被成功地解密,数据再次含有相同标志物:

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

所以我得到的4个字节的有效载荷(0×02 0×03 0×04 0×05)。

我已经写了FrameDecoder,但现在我不能决定剥离括号字节或不:

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

回答

1

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