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: 內建訂閱釋出和點對點通信