libminimsgbus介绍
libminimsgbus集成集中常用的通信方式,主要满足订阅发布模式和点对点通信。以c++11标准开发。已经做来测试。
libminimsgbus的订阅发布分细化了协议,可以直接分为进程内,进程间,网络三种方式。
网络订阅发布
其中网络订阅发布又分为无中心的和有中心的MQ模式:
无中心模式存在丢失数据的可能,这是因为在查找主题时有延迟,同时无中心的不会保证数据的顺序,根据设计,在初始化等待时,如果在不停的发布数据则会等待,但是新发布的数据在不停的按照订阅节点发送数据,多线程运行。
有中心MQ模式不会丢失数据,该模式是将数据直接传输到MQ中心,在中心节点分发数据,但是不缓存数据。劣势是必须有中心节点,并且要保障一直运行。
点对点通信
点对点通信则直接时客户端向服务端发送数据。
程序使用
订阅发布
BusFactory::Create(BusType::Inpoc);
BusFactory::Create(BusType::Ipc);
BusFactory::Create(BusType::tcp);
1.inpoc:观察着模式
2.ipc:内存共享
3.tcp:封装zmq组播管理主题,nng传输数据;此模式使用需要设置本地网络地址,
使用方法:
MsgLocalNode::LocalAddress = "127.0.0.1";
MsgLocalNode::LocalPort = 5567;
默认地址为*,程序自动获取可用ip,端口默认:0.
说明:如果组播不通,可以直接设置远端地址
MsgLocalNode::remote
4.mq模式,支持中心节点数据转发。
1).中心节点
BridgeCore *bridge = new BridgeCore();
list<string> lstsub;
list<string> lstrec;
lstsub.push_back("tcp://127.0.0.1:4456");
lstrec.push_back("tcp://127.0.0.1:4457");
bridge->pubAddress = lstsub;//通过此地址接收订阅方订阅;
bridge->recAddress = lstrec;//通过此地址接收发布方数据;
bridge->start();
说明:接收数据和订阅数据2类地址不能相同
2).客户端发布订阅
BusFactory::CreateMQ();
3)订阅对象回收,则自动取消订阅
点对点通信
PtpFactory::Create();
创建对象,设置其中的地址和端口,即可使用。
其他说明
1. 程序集成了zmq,ipc,nng三个通信组件 ,zmq使用pgm作为组播库,该方式是可靠的,通过zmq多播方式通知主题节点,该方式通常适合小、少量传输。
采用ipc通讯解决一台机器时多进程占用端口问题,zmq只能一个进程通讯。
nng库用来传输真实的数据。
2.使用cmake直接生成,c++11编写,支持Windows和Linux
项目地址
GitHub - jinyuttt/libminimsgbus: 集成订阅发布和点对点通信