ZMQ专题学习之四:libzmq的发布及订阅方式

ZMQ专题学习之四:libzmq的发布及订阅方式

   接上一节,简单的展示了调用libzmq实现request-reply模式的实例,这一节开始介绍publisher-subscribe模式的实例。

    今天展示的是发布订阅方式的publisher-subscribe模式:

 

 

第一步:先建立工程文件,与上一节一样,建立一个testLibzmqPublisher工程,以控制台的项目方式建立。

第二步:参照上节论述,在建立好的工程文件夹中建立两个目录,include和lib两个文件夹。

然后分别把 zmq.h 和zmq_utils.h拷贝到includes文件夹,libzmq.lib和libzmq.dll拷贝到lib文件夹中。(具体从哪里考,这里就不啰嗦了,对于熟悉vs环境的人,一点就透)。

第三步:设置附加包含目录、附加链接库,调试过dll的人都懂的,不再赘述。

第四步:在建立的工程文件的cpp的文件中,添加如下代码;

// testLibzmqPublisher.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"


#define _CRT_SECURE_NO_WARNINGS
#include "../include/zmq.h"
#include "../include/zmq_utils.h"
#include <string.h>
#include <time.h>
#include <assert.h>
#include <iostream>
using namespace std;


// Publisher.cpp
int _tmain(int argc, _TCHAR* argv[])
{
    void *context = zmq_ctx_new();
    void *publisher = zmq_socket(context, ZMQ_PUB);
    int rc = zmq_bind(publisher, "tcp://*:5556");
    assert(rc == 0);
 
    while (1) {
        // Send timestamp to all subscribers
        char timestamp[31] = { 0 };
        sprintf(timestamp, "timestamp %ld", time(NULL));
        int size = zmq_send(publisher, timestamp, 30, 0);
        printf("send %s\n",timestamp);
        Sleep(5000);
    }
    zmq_close(publisher);
    zmq_ctx_destroy(context);
    return 0;
}

第五步:编译后,会生成对应版本的,比如是release版本还是debug版本,32位,还是64位版本的dll和lib库。(本文为64位)

第六步:建立subscribe的工程文件一个testLibzmqSubscribe工程,以控制台的项目方式建立。

第七步:同样的操作,在建立好的工程文件夹中建立两个目录,include和lib两个文件夹。

然后分别把 zmq.h 和zmq_utils.h拷贝到includes文件夹,libzmq.lib和libzmq.dll拷贝到lib文件夹中。(具体从哪里考,这里就不啰嗦了,对于熟悉vs环境的人,一点就透)。

第八步:设置附加包含目录、附加链接库,调试过dll的人都懂的,不再赘述。

第九步:在建立的工程文件的cpp的文件中,添加如下代码;

// testLibzmqSubscribe.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"


#define _CRT_SECURE_NO_WARNINGS
#include "../include/zmq.h"
#include "../include/zmq_utils.h"
#include <windows.h>
#include <iostream>
#include <string>


// Subscribe.cpp
int _tmain(int argc, _TCHAR* argv[])
{
    void *context = zmq_ctx_new ();
    void *subscriber = zmq_socket (context, ZMQ_SUB);
    int rc = zmq_connect (subscriber, "tcp://localhost:5556");


    char *filter = "timestamp ";
    rc = zmq_setsockopt (subscriber, ZMQ_SUBSCRIBE, filter, strlen (filter));
     while (1) {
 
        char buffer[256] = {0};
        int size = zmq_recv (subscriber, buffer, 255, 0);
        printf("Timestamp: %s\n", buffer);
    }
 
    zmq_close (subscriber);
    zmq_ctx_destroy (context);
    getchar();
    return 0;
}

第十步:编译后,会生成对应版本的,比如是release版本还是debug版本,32位,还是64位版本的dll和lib库。(本文为64位)

至此,已经把两个样例工程文件编译完毕,分别在各自的release或者debug目录执行exe文件,执行界面如下:

publisher的显示界面

 

subscribe的显示界面

 

上面两个图显示了两个程序的相互通信的过程。

demo下载的地址:https://download.csdn.net/download/jyl_sh/12405367

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jyl_sh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值