当前位置: 首页 > 知识库问答 >
问题:

Netty ByteBuf处理,流水线中的解码器结构

东门文斌
2023-03-14

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

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

其中0x3c表示<符号作为开始帧标记,0x3e表示>符号作为结束帧标记。

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

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

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

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

共有1个答案

董凡
2023-03-14

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

 类似资料:
  • 问题内容: 我试图在尽可能短的时间内插入大量(-ish)元素,并且尝试了以下两种选择: 1)流水线: 2)批处理: 我没有注意到任何明显的时差(实际上,我希望批处理方法会更快):对于大约250K的插入,流水处理大约需要7秒,而批处理大约需要8秒。 阅读有关流水线的文档, “使用流水线使我们能够立即将两个请求都发送到网络上,从而消除了大部分延迟。此外,它还有助于减少数据包碎片:单独发送20个请求(等

  • 对于MIPS架构的标准5级管道,并假设一些指令相互依赖,如何将管道气泡插入到以下汇编代码中? 首先我们插入一个气泡,我们 如您所见,当I3暂停时,I4可以继续解码。对不对?下一个 我认为这在MIPS的标准管道中是可能的,但有人说,每当插入气泡时,整个管道都会停顿。如何才能解决这个问题?

  • 我知道这里之前有人问过这个问题:Kafka流并发? 但这对我来说很奇怪。根据文档(或者我可能遗漏了什么),每个分区都有一个任务,这意味着不同的处理器实例,每个任务由不同的线程执行。但是当我测试它的时候,我看到不同的线程可以得到不同的处理器实例。因此,如果你想在处理器中保持内存状态(老式的方式),你必须锁定? 线程ID:88 ID:c667e669-9023-494b-9345-236777e9df

  • 在本节中,我们将研究如何链接不同的估计器。 简单示例:估计器之前的特征提取和选择 特征提取:向量化器 对于某些类型的数据,例如文本数据,必须应用特征提取步骤将其转换为数值特征。 为了说明,我们加载我们之前使用的 SMS 垃圾邮件数据集。 import os with open(os.path.join("datasets", "smsspam", "SMSSpamCollection")) as

  • 主要内容:实例,实例,实例,实例,实例,实例关键词:流水线,乘法器 硬件描述语言的一个突出优点就是指令执行的并行性。多条语句能够在相同时钟周期内并行处理多个信号数据。 但是当数据串行输入时,指令执行的并行性并不能体现出其优势。而且很多时候有些计算并不能在一个或两个时钟周期内执行完毕,如果每次输入的串行数据都需要等待上一次计算执行完毕后才能开启下一次的计算,那效率是相当低的。流水线就是解决多周期下串行数据计算效率低的问题。 流水线 流水线的基

  • 问题内容: 我必须用Java实现HTTP客户端,并且出于我的需要,似乎最有效的方法是实现HTTP管道(按照RFC2616)。 顺便说一句,我想管道POST。(我也不在谈论多路复用。我在谈论流水线,即在接收到任何HTTP请求的响应之前,通过一个连接发送许多请求) 我找不到明确声明其支持流水线的第三方库。但是我可以使用例如Apache HTTPCore 来构建这样的客户端,或者如果需要的话,可以自己构