消息包标头的设计模式
Design pattern for message packet header
我正在使用libevent
编写自己的消息传递API。数据由包含数据字节数组的packet body
和包含整个数据包大小信息的packet header
的数据包结构封装(原因是在完整流处调用回调)。
class PacketHeader {
size_t packet_size;
};
class Packet {
PacketHeader header;
uint8_t* body;
};
然而,我希望用户能够自定义他们自己的PacketHeader,同时我可以处理消息的底层大小信息。这样做的最佳做法是什么?我应该使用继承还是纯虚拟抽象(接口类)。我考虑了以下内容,但不确定这是否是最佳实践。
template <class Derived>
class PacketHeader{
size_t packet_size;
size_t header_size() const {return sizeof(Derived);}
}
为什么不让数据包自我描述,比如:
struct packet_header {
int16_t size; // size_t is too big
uint8_t header; // header size
uint8_t type; // header type, some sort of id for header/message
};
然后,用户可以定义自己的标题类型和大小,一条消息的组成如下:
[ ][ ][ ]<--custom header-->[--body--]
因此custom header
块是可选的,并且大小在分组报头中指定。然后允许用户特定的代码适当地解码报头。
相关文章:
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- g++ 说函数不存在,即使包含正确的标头
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 在CMake中使用find_package时,是否会显式包含标头
- 资源管理设计模式
- 错误"Could not find Boost"(缺少:上下文标头)
- 如何在标头中声明(或定义)函数的问题
- C++设计决策:一个标头用于多个源文件...或不
- 通过 Conan 安装仅标头包时出错
- 用于实时流式传输的 WebM 数据包标头
- DPDK:修改捕获的数据包标头的最有效方法
- 处理数据包的设计模式
- C++ - 构造带有标头的数据包并通过 UDP 套接字发送
- 函数从windows XP中的数据包中检索标头目标地址
- 从IPv6数据包获取ICMPV6标头
- 防止 CMake 为仅可选标头库生成的生成文件在仅标头模式下编译源文件
- UDP标头校验和不正确时是否丢弃UDP数据包
- 消息包标头的设计模式
- 使用Rcpp构建一个R包,该包包含C源代码和带有限制限定符的标头
- 关于设计模式和高级编程的好书,而不是头优先