前言
本教程会具体介绍如何使用服务发现模式,并展示实际运行效果。
概念详解
服务发现
服务发现的主要功能是,通过局域网广播,让多个进程之间互相发现对方,并且交换进程之间的通信相关信息,从而实现自动匹配,自动创建链接的目的。当用户无法提前确定通信主机的IP地址时,建议使用服务发现模式。
domain
domain是虚拟化的namespace,起到隔离的作用,只有处在同一个domain中的通信实体才能进行通信。为减少不必要的带宽浪费,处于不同domain下的节点,即使topic相同,也无法建立通信。
topic
topic指主题,正在发布的信息会被分到称为topic的通道,topic具有唯一名称,只有相同domain且相同topic的节点之间才能进行通信。
通信协议
通信实体要实现彼此之间的通信,必须遵循特定的规则和约定,也就是通信协议。对于communication的服务发现模式,支持的通信协议有以下几种:
zmq tcp(基于 zmq 的 tcp socket 通信,用于跨设备的通信)
zmq ipc(基于 zmq 的 ipc socket 通信,用于进程间通信,windows 平台不支持)
zmq epgm(基于zmq的epgm socket通信,用于组播通信,且通信双方必须在同一个局域网)
intra(进程内通信)
shared memory(基于共享内存的通信,分为CPU shared memory和hbmem shared memory两种)
Fast-DDS(基于 eProsima Fast DDS 通信,用于跨设备的通信)
Hybrid
其中,Hybrid不是一个具体的通信协议,仅支持在服务发现模式下使用,communication会根据对端与本端的关系自动选择连接协议,具体规则如下:
同进程:intra
同主机不同进程:shared memory
不同主机:zmq tcp
配置方法
pub端
sub端
communication.json
运行结果
程序执行时,如果成功基于服务发现模式进行通信,pub端和sub端会分别打印以下信息。
