一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

自动驾驶C++实时中间件-PuppetMaster重构历程:第三阶段通信层抽象实践

时间:2026-05-22 09:45:01 编辑:袖梨 来源:一聚教程网

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

自动驾驶C++实时中间件:PuppetMaster 重构记录,阶段三:通信层抽象

该项目采取渐进式开发策略,从既有自动驾驶中间件经验中提炼核心功能模块,包括通信机制、任务调度、主题管理等基础组件,而非一开始就构建庞大框架。

通信抽象层的必要性

在实时系统中,中间件需要处理多种通信场景:

  1. 进程内数据交换
  2. 共享内存与进程间通信
  3. ZeroMQ消息传递
  4. DDS/FastDDS通信
  5. 未来可能扩展的录制回放等功能

为避免业务模块与特定通信后端强耦合,当前阶段重点构建通信抽象层,形成清晰的分层架构。

核心架构实现

本阶段主要新增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
                        

相关文章