前言
Communication具有可扩展性,可以集成不同的通信协议,目前支持的协议主要有zmq tcp,zmq ipc,zmq epgm,intra,shared memory,PCIe,Fast-DDS等,此外还支持用于服务发现的hybrid,以及用于复合协议的composite。
本教程会对Communication模块的复合协议做具体说明,介绍composite通信协议的组合配置方法,并展示实际运行效果。
概念详解
复合协议
复合协议不是一个具体的通信协议,而是多种协议的组合,用户在构建通信实体时指定composite协议(PROTOCOL_COMPOSITE),即可配置多种协议和多种发现方式。
匹配规则
在复合协议下,无论是静态配置还是动态配置(服务发现),都可以自由组合匹配。
比如,pub端可以配置多种静态配置,sub端也可以配置同样的多种静态配置,两者可以互相连接进行通信。pub端可以配置多种动态配置,sub端也可以配置同样的多种动态配置,两者也可以互相连接进行通信。当复合协议配置中既包含静态配置也包含动态配置时,匹配规则按照静态与静态各自匹配,动态与动态根据自动发现机制和协议优先级匹配的方式来执行。
需要注意的是,DDS和Hybrid这两种协议不支持添加到复合协议中。
配置方法
用户在指定复合协议的时候,需要在CommAttr结构体中存放CompositeOption数组。CommAttr结构体用于构建Communication通信实体传入的通信属性配置。
如果配置静态发现,可以参考以下方式:
如果配置动态发现,可以参考以下方式(不配置participant_id):
如果希望复合协议配置中既包含静态配置也包含动态配置,将以上二者的写法结合即可。
至此就完成了复合协议的相关配置,之后在创建publisher和subscriber通信实体的时候,将CommAttr结构体传入即可。
运行结果
sub端的打印信息如下:
pub端的打印信息如下:
若终端打印上述信息,则说明已经成功使用复合协议建立了pub和sub之间的通信。
规则验证
只配置PROTOCOL_ZMQ_IPC
配置方式
打印信息
配置PROTOCOL_SHM和PROTOCOL_ZMQ_IPC
配置方式
打印信息
总结
可以看到,只配置PROTOCOL_ZMQ_IPC时,pub端传输结束后,会有专门的打印信息,而添加了PROTOCOL_SHM后,该打印信息消失,表明此时PROTOCOL_SHM成功替换了PROTOCOL_ZMQ_IPC。
