ZeroMQ“发布/订阅”模型的C++代码

本文介绍如何使用C++实现ZeroMQ的发布/订阅模型。通过具体代码示例,展示如何设置发布者和订阅者,以及在实际运行中可能出现的消息丢失问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     ZeroMQ环境的搭建就不说了,之前已经说过。

     来看ZeroMQ的“发布/订阅”模型的C++代码:

     pub.cpp代码为:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <string.h>
#include "zmq.h"

int main()
{
    void* context = zmq_ctx_new();
    assert(context != NULL);

    void* publisher = zmq_socket(context, ZMQ_PUB);
    assert(publisher != NULL);

    int ret = zmq_bind(publisher, "tcp://*:5555");
    assert(ret == 0);

    int i = 0;
    while(1)
    {
        char szBuf[1024] = {0};
        snprintf(szBuf, sizeof(szBuf), "server i=%d", i);
        ret = zmq_send(publisher, szBuf, strlen(szBuf) + 1, 0);
        i++;

        sleep(1);
    }

    zmq_close (publisher);
    zmq_ctx_destroy (context);

    return 0;
}

        sub.cpp代码为:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include "zmq.h"

int main()
{
    printf("Hello world!\n");

    void* context = zmq_ctx_new();
    assert(context != NULL);

    void* subscriber = zmq_socket(context, ZMQ_SUB);
    assert(subscriber != NULL);

    int ret = zmq_connect(subscriber, "tcp://localhost:5555");
    assert(ret == 0);

    ret = zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, "", 0);
    assert(ret == 0);

    while(1)
    {
        printf("into while\n");
        char szBuf[1024] = {0};
        ret = zmq_recv(subscriber, szBuf, sizeof(szBuf) - 1, 0);
        if (ret > 0)
        {
            printf("%s\n", szBuf);
        }
    }

    zmq_close(subscriber);
    zmq_ctx_destroy(context);

    return 0;
}

        先启动发布者的话, 订阅者会错过部分消息,无法挽回。

        来看看实际效果(开启了1个发布者和2个订阅者):

ubuntu@VM-0-15-ubuntu:~/taoge/zmq/test$ ./server 
ubuntu@VM-0-15-ubuntu:~/taoge/zmq/test$ ./client 
Hello world!
into while
server i=21
into while
server i=22
into while
server i=23
ubuntu@VM-0-15-ubuntu:~/taoge/zmq/test$ ./client 
Hello world!
into while
server i=57
into while
server i=58
into while
server i=59

        OK, 不多说。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值