Netty ByteBuf处理,管道中的decoders结构
Netty ByteBuf processing, decoders structure in the pipeline
我的服务器向客户端发送响应或将消息转发给另一个客户端取决于消息内容。
我需要使用 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 个字节。
我建议您将解密和转换拆分为两个处理程序。
第一个的职责只是解密原始数据。二是将原始数据转化为纯信息。这种解决方案的好处是,如果以后有人想更改解密方法,他只需更改第一个处理程序即可,而不会影响第二个处理程序。同样,变换方式也可以改变,不影响解密。
我的服务器向客户端发送响应或将消息转发给另一个客户端取决于消息内容。 我需要使用 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 个字节。
我建议您将解密和转换拆分为两个处理程序。 第一个的职责只是解密原始数据。二是将原始数据转化为纯信息。这种解决方案的好处是,如果以后有人想更改解密方法,他只需更改第一个处理程序即可,而不会影响第二个处理程序。同样,变换方式也可以改变,不影响解密。