.[ZeroMQ] messaging pattern -- publish/subscribe
来源:互联网 发布:linux jps命令找不到 编辑:程序博客网 时间:2024/05/10 07:01
ZeroMQ 中规定了几个pattern用法,除此之外,不能乱用。
publish/subscribe, 一个one-to-many的消息发布。一个publisher,多个subscriber。
如果pub发布消息的时候,sub没有连接上来,则此消息,sub是收不到的。
注意:subscribe 初始化的时候一定要设置filter,否则收不到任何消息。
ServerPub端:
#include <assert.h>#include <iostream>#include <tchar.h>#include <zmq.h>using namespace std;#pragma comment(lib,"libzmq.lib")static int g_send(void *socket,char *str){zmq_msg_t msg;int rc;rc = zmq_msg_init_size(&msg,strlen(str)+1);assert(0 == rc);memcpy(zmq_msg_data(&msg),str,strlen(str)+1);rc = zmq_send(socket,&msg,0);assert(0 == rc);zmq_msg_close(&msg);return rc;}static char* g_recv(void *socket){zmq_msg_t msg;int rc;rc = zmq_msg_init(&msg);assert(0 == rc);rc = zmq_recv(socket,&msg,0);assert(0 == rc);int nSize = zmq_msg_size(&msg);char *pBuf = new char[nSize+1];memcpy(pBuf,zmq_msg_data(&msg),nSize);pBuf[nSize] = 0;zmq_msg_close(&msg);return pBuf;}void sub_thread(void *ctx){void *subsocket = zmq_socket(ctx,ZMQ_SUB);zmq_connect(subsocket,"inproc://in-pub");zmq_setsockopt(subsocket,ZMQ_SUBSCRIBE,"",0); //no filtercout<<"begin in-sub"<<endl;while(1){char *pStr = g_recv(subsocket);cout<<"in-sub:"<<pStr<<endl;free(pStr);}}void main(int argc,TCHAR*argv[]){void *ctx;ctx = zmq_init(1);assert(ctx);void *pubsocket;pubsocket = zmq_socket(ctx,ZMQ_PUB);assert(pubsocket);zmq_bind(pubsocket,"inproc://in-pub");zmq_bind(pubsocket,"tcp://127.0.0.1:8888");HANDLE hThread;hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)sub_thread,ctx,0,NULL);cout<<"begin pu"<<endl;int i=0;while(1){char msg[80];sprintf(msg,"num %d",i++);g_send(pubsocket,msg);Sleep(2000);}zmq_close(pubsocket);zmq_term(ctx);}
ClientSub端:
#include <assert.h>#include <iostream>#include <tchar.h>#include <zmq.h>using namespace std;#pragma comment(lib,"libzmq.lib")static int g_send(void *socket,char *str){zmq_msg_t msg;int rc;rc = zmq_msg_init_size(&msg,strlen(str)+1);assert(0 == rc);memcpy(zmq_msg_data(&msg),str,strlen(str)+1);rc = zmq_send(socket,&msg,0);assert(0 == rc);zmq_msg_close(&msg);return rc;}static char* g_recv(void *socket){zmq_msg_t msg;int rc;rc = zmq_msg_init(&msg);assert(0 == rc);rc = zmq_recv(socket,&msg,0);assert(0 == rc);int nSize = zmq_msg_size(&msg);char *pBuf = new char[nSize+1];memcpy(pBuf,zmq_msg_data(&msg),nSize);pBuf[nSize] = 0;zmq_msg_close(&msg);return pBuf;}void sub_thread(void *ctx){void *subsocket;subsocket = zmq_socket(ctx,ZMQ_SUB);assert(subsocket);zmq_connect(subsocket,"tcp://127.0.0.1:8888");zmq_setsockopt(subsocket,ZMQ_SUBSCRIBE,"",0);while(1){char *pStr = g_recv(subsocket);cout<<"client in-sub:"<<pStr<<endl;free(pStr);}}void main(int argc,TCHAR*argv[]){void *ctx;ctx = zmq_init(1);assert(ctx);void *subsocket;subsocket = zmq_socket(ctx,ZMQ_SUB);assert(subsocket);HANDLE hThread;hThread = CreateThread(NULL,1,(LPTHREAD_START_ROUTINE)sub_thread,ctx,0,NULL);zmq_connect(subsocket,"tcp://127.0.0.1:8888");zmq_setsockopt(subsocket,ZMQ_SUBSCRIBE,"",0);cout<<"begin sub"<<endl;while(1){char *pStr = g_recv(subsocket);cout<<"client sub:"<<pStr<<endl;free(pStr);}zmq_close(subsocket);zmq_term(ctx);}
- .[ZeroMQ] messaging pattern -- publish/subscribe
- ZeroMQ(java)之Publish/Subscribe模式
- ZeroMQ(java)之Publish/Subscribe模式
- ZeroMQ(java)之Publish/Subscribe模式
- ZeroMQ之模式二 发布者订阅者(publish-subscribe)
- Publish~Subscribe
- 分布式发布订阅消息系统 Kafka (A distributed publish-subscribe messaging system)
- BigQueue:The Architecture and Design of a Publish & Subscribe Messaging System Tailored for Big Data
- 观察者模式(Observer Pattern,对象行为型模式,发布-订阅模式 Publish/Subscribe Pattern)
- Publish-Subscribe Design Patterns
- DOJO subscribe & publish
- jedis的publish/subscribe
- Archetype&Specification&Publish-Subscribe
- 观察者模式 Publish/Subscribe
- ActiveMQ的publish/subscribe
- Publish Subscribe Channel 订阅
- 5.2. Publish-Subscribe Channel
- RabbitMq之Publish/Subscribe
- 在Eclipse中运行C++程序出现"Launch failed. Binary not foud"和"Program file not Specified"的问题
- flash和html跨域交互
- Oracle Database、OID、SOA安装文档
- Android对图片的压缩读取和保存
- 保存复选框,类文件(2)
- .[ZeroMQ] messaging pattern -- publish/subscribe
- 《浪潮之巅》读后感
- [数据库]添加记录Insert into 语句详解
- Linux驱动程序开发 - 设备控制接口
- Android与服务器端数据交互(基于SOAP协议整合android+webservice)
- source insight的快捷键总结
- c#SerialPort通信
- Linux上vi(vim)编辑器使用教程
- HttpServlet详解