探索C++实时中间件开发新路径:PuppetMaster项目重构进入通信抽象阶段

该项目采取渐进式开发策略,从既有自动驾驶中间件经验中提炼核心功能模块,包括通信机制、任务调度、主题管理等基础组件,而非一开始就构建庞大框架。
在实时系统中,中间件需要处理多种通信场景:
为避免业务模块与特定通信后端强耦合,当前阶段重点构建通信抽象层,形成清晰的分层架构。
本阶段主要新增transport模块,其目录结构如下:
include/
`-- puppet_master/
`-- transport/
|-- message.h
|-- transport.h
`-- registry.hdocs/
`-- transport.mdtest/
`-- transport_abstraction_test.cpp
通信层首先需要统一消息表示方式,采用字节流抽象而非直接引入模板类型:
namespace puppet_master::transport {using ByteBuffer = std::vector;class ByteView {
public:
ByteView(const core::Byte* data, std::size_t size);
explicit ByteView(const ByteBuffer& buffer); static ByteView From(const void* data, std::size_t size); const core::Byte* data() const noexcept;
std::size_t size() const noexcept;
bool empty() const noexcept; core::Status Validate() const;
};struct MessageDescriptor {
std::string type_name;
std::string encoding {"application/octet-stream"}; core::Status Validate() const;
};struct MessageMetadata {
core::SequenceNumber sequence {0};
core::TimePoint source_timestamp {};
core::TimePoint reception_timestamp {};
};struct Message {
ByteBuffer payload;
MessageMetadata metadata;
};}
EndpointConfig结构体将主题规范与消息描述符相关联:
struct EndpointConfig {
core::TopicSpec topic;
MessageDescriptor message; core::Status Validate() const
{
auto status = topic.Validate();
if (!status.ok()) {
return status;
}
return message.Validate();
}
};
TransportCapabilities结构体明确定义各通信后端的能力边界:
struct TransportCapabilities {
core::TransportKind kind {core::TransportKind::kInMemory};
bool supports_callbacks {false};
bool supports_blocking_read {false};
bool supports_reliable_delivery {false};
bool supports_keep_all {false};
bool supports_zero_copy {false};
};
TransportRegistry提供轻量级的通信后端管理功能:
class TransportRegistry {
public:
core::Status Register(TransportPtr transport);
core::Result Find(const core::TransportName& name) const;
core::Status Unregister(const core::TransportName& name);
std::vector ListNames