ZMQ发布订阅模型

news2024/9/21 0:43:30

案例一

发布者Publisher(server)

// server.cpp
#include <zmq.hpp>
#include <string>
#include <iostream>
#include <chrono>
#include <thread>
using namespace std;
using namespace zmq;
int main() {
    context_t context(1);
    socket_t socket(context, ZMQ_PUB);
    socket.bind("tcp://*:5555");

    for ( int i= 0;i< 10;i++) {
        this_thread::sleep_for(std::chrono::seconds(1));
        message_t message(5);
        memcpy(message.data(), "Hello", 5);
        socket.send(message, send_flags::none);
        cout << "Sent 'Hello'" << std::endl;
    }
    return 0;
}

订阅者Subscribers(client)

// client.cpp
#include <zmq.hpp>
#include <string>
#include <iostream>
using namespace std;
using namespace zmq;
int main() {
    context_t context(1);
    socket_t socket(context, ZMQ_SUB);
    socket.connect("tcp://localhost:5555");
    socket.setsockopt(ZMQ_SUBSCRIBE, "", 0);

    while (true) {
        message_t message;
        socket.recv(message, recv_flags::none);
        //cout << "Received: " << static_cast<char*>(message.data()) << endl;
        cout << "Received: " << message.to_string() << endl;
    }
    return 0;
}

编译

g++ -o server server.cpp `pkg-config --cflags --libs libzmq`
g++ -o client client.cpp `pkg-config --cflags --libs libzmq`

在这里插入图片描述

订阅者程序步骤

连接发布者

context_t context(1);
    socket_t socket(context, ZMQ_SUB);
    socket.connect("tcp://localhost:5555");

设置订阅过滤器

socket.setsockopt(ZMQ_SUBSCRIBE, "", 0);

函数参数

ZMQ_SUBSCRIBE:

这是一个常量,表示这个套接字选项是用于设置订阅过滤器的。在 ZeroMQ 的发布-订阅模式中,订阅者(subscriber)套接字需要订阅一个或多个特定的消息主题,以便只接收与这些主题匹配的消息。

过滤字符串"":

这是订阅过滤器的字符串。在这个例子中,传递了一个空字符串,这意味着订阅者将订阅所有可用的消息。如果这里指定了一个非空字符串,那么订阅者只会接收与该字符串匹配的消息。

过滤字符串长度0:

这是第三个参数,表示订阅过滤器字符串的长度。由于这里传递了一个空字符串,所以长度是 0

接受消息

在发布订阅模型中,发布者只负责发布消息,不在乎订阅者收没收到,而订阅者只负责接受自己想要的消息,也不在乎发布者发布的是什么消息。

message_t message;
socket.recv(message, recv_flags::none);

发布者程序步骤

连接端口

context_t context(1);
socket_t socket(context, ZMQ_PUB);
socket.bind("tcp://*:5555");

发布消息

在发布订阅模型中,发布者只负责发布消息,不在乎订阅者收没收到。

message_t message(5);
memcpy(message.data(), "Hello", 5);
socket.send(message, send_flags::none);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2069340.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

维纳滤波(Wiener Filtering)

维纳滤波&#xff08;Wiener Filtering&#xff09; 引言 维纳滤波&#xff08;Wiener Filtering&#xff09;是一种最优线性滤波方法&#xff0c;广泛应用于信号处理、图像处理和通信系统中。它旨在从含噪声的信号中恢复原始信号&#xff0c;最小化均方误差&#xff08;MSE&…

谷粒商城实战笔记-251-商城业务-消息队列-Exchange类型

文章目录 一&#xff0c;Exchange二&#xff0c;Exchange的四种类型1&#xff0c;direct2&#xff0c;fanout3&#xff0c;topic 三&#xff0c;实操1&#xff0c;创建一个exchange2&#xff0c;创建一个queue3&#xff0c;将queue绑定到exchange 一&#xff0c;Exchange AMQP …

二叉树的链式存储(代码实现)

二叉树的链式存储 用链表实现&#xff0c;基于完全二叉树规律来构建树&#xff0c;按照完全二叉树的编号方法&#xff0c;从上到下&#xff0c;从左到右。一共n个节点。 第i个节点&#xff1a; 左子节点编号&#xff1a;2*i &#xff08;2*i<n&#xff09; 右子节点编号&…

【C++题解】1146. 求S的值

欢迎关注本专栏《C从零基础到信奥赛入门级&#xff08;CSP-J&#xff09;》 问题&#xff1a;1146. 求S的值 类型&#xff1a;递归基础、函数 题目描述&#xff1a; 求 S12471116…的值刚好大于等于 5000 时 S 的值。 输入&#xff1a; 无。 输出&#xff1a; 一行&…

写作手三天速成攻略【数学建模国赛赛前必看内容】

第一天&#xff1a;准备论文模板&#xff0c;学习各类基础画图技巧 1、论文模板 对于写作手&#xff0c;除了内容的连贯性&#xff0c;排版是非常重要的&#xff0c;可以说有一个好的排版&#xff0c;只要论文是完整的&#xff0c;有结果的&#xff0c;基本上保底有省奖&#…

CSP-CCF 201412-2 Z字形扫描

目录 一、问题描述 二、解答 三、总结 一、问题描述 在图像编码的算法中&#xff0c;需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个nn的矩阵&#xff0c;Z字形扫描的过程如下图所示&#xff1a; 对于下面的44的矩阵&#xff0c;   1 5 3 9   3 7 5 6  …

玩客云刷机armbian后docker启动不起来,提示bpf_prog_query(BPF_CGROUP_DEVICE) failed

/ ___| ( _ )/ |___ \ \___ \ / _ \| | __) |___) | (_) | |/ __/ |____/ \___/|_|_____|Welcome to Armbian 20.12 Bullseye with Linux 5.10.61-aml-s812Linux aml-s812 5.10.61-aml-s812 #20.12 SMP Thu Sep 2 20:11:09 CST 2021 armv7l GNU/Linux 玩客云刷机armbian后dock…

工业气膜仓储:高效、灵活的仓储解决方案—轻空间

在现代工业生产中&#xff0c;仓储设施的选择至关重要。作为一种新型的仓储解决方案&#xff0c;工业气膜仓储凭借其高效、灵活、经济的优势&#xff0c;正在逐渐取代传统建筑仓库&#xff0c;成为各类企业的理想选择。 一、快速搭建&#xff0c;满足多种需求 工业气膜仓储采用…

24年浙江事业单位考试报名流程保姆级教程

2024年浙江事业单位考试报名马上就要开始了&#xff0c;有想要参加考试报名的同学可以提前了解一下报名流程&#xff0c;以及报名照要求。 一、考试时间安排&#xff1a; 报名时间&#xff1a;8月27日9:00 9月2日16:00 资格审核时间&#xff1a;8月27日—9月3日 网上缴费时…

软件开发商业模式的思考:软件最大的竞争力就是低价格

很多程序员在工作的时候&#xff0c;都会有机会碰到做外包项目的机会&#xff0c;还有很多的专业网站&#xff0c;接项目&#xff0c;在这种外包开发中&#xff0c;经常会按照评估的开发时间和程序员的薪酬来定价。 前几年有朋友介绍过一个线下实体店经营者&#xff0c;想做一…

TF SD卡突然容量变小或者名字改变并且电脑就算格式化也恢复不了原状态或者干脆windows系统都格式化失败的解决办法

我自己是因为在使用canmv系统驱动k210时把系统镜像下载到了sd tf卡中导致tf 卡系统发生改变&#xff0c;32g变16mb而且名字也变成boot 这是因为你下载的系统镜像把原来的fat32或者其他常用sd tf卡系统代替了&#xff0c;导致电脑识别时&#xff0c;你现在的sd卡系统把总大小减…

【Redis】Redis 缓存应用、淘汰机制—(四)

目录 一、缓存应用二、淘汰机制三、LRU 算法四、LFU 算法 一、缓存应用 一个系统中不同层面数据访问速度不一样&#xff0c;以计算机为例&#xff0c;CPU、内存和磁盘这三层的访问速度从几十 ns 到 100ns&#xff0c;再到几 ms&#xff0c;性能的差异很大&#xff0c;如果每次…

【视频讲解】主成分分析原理与水果成熟数据实例:Python中PCA-LDA 与卷积神经网络CNN...

全文链接&#xff1a;https://tecdat.cn/?p37450 分析师&#xff1a;Shixian Ding 主成分分析&#xff08;PCA&#xff09;作为数据科学中用于可视化和降维的重要工具&#xff0c;在处理具有大量特征的数据集时非常有用。就像我们难以找到时间阅读一本 1000 页的书&#xff0…

jpg免费转换成pdf?jpg和pdf谁更好?图片转pdf的优势总结!

jpg免费转换成pdf&#xff1f;jpg和pdf谁更好&#xff1f;我们经常需要将JPG图片转换为PDF文档。无论是个人照片管理、证件扫描&#xff0c;还是商业和行政领域的文档整理、合同协议、电子邮件附件&#xff0c;以及教育领域的课件制作和论文报告&#xff0c;都可以通过JPG到PDF…

JVM - 1.类加载子系统

1.类加载子系统 1.作用 1.负责从文件系统或网络中加载字节码(.class)文件&#xff0c;即将物理磁盘上的字节码文件加载到内存中&#xff0c;生成供程序使用的类对象 2.字节码文件要求在文件开头有特定的文件标识(CA FE BA BE)3.类加载器(ClassLoader)只负责字节码文件的加载&am…

VS项目写完执行exe隐藏调试用的黑窗口(控制台)

在vs创建完项目&#xff0c;我们只希望运行显示界面&#xff0c;不显示控制台&#xff0c;控制台就是这样的黑色窗口&#xff0c;他可以在我们调试的时候打印一些东西来判断辅助编程。 1、首先修改为窗口模式 2、在你的main文件里最上面加入一行代码&#xff1a; #pragma comme…

android打印编码转换-SAAS本地化及未来之窗行业应用跨平台架构

一、打印转码 1.图片转打印 2.文字转打印 二、代码 package CyberWinPHP.Cyber_Plus;import java.util.Hashtable;import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.WriterException; import com.google.zxing.co…

【文档合集】软件类常用文档整理大全,软件工程,软件项目管理,技术标书方案,模

目的&#xff1a;规范系统开发流程&#xff0c;提高系统开发效率。 立项申请需求分析方案设计方案评审开发调整测试阶段系统培训试运行测试验收投入使用 所有文档过去进主页获取。 获取方式&#xff1a;本文末个人名片直接获取。 软件资料清单列表部分文档清单&#xff1a;工作…

一款免费轻量的CAD看图软件

这款免费CAD看图软件&#xff0c;旨在为用户提供快速查看和处理CAD图纸的能力。该软件以其轻量化、功能全面、操作简便等特点受到用户的欢迎。支持多种CAD文件的快速查看&#xff0c;包括但不限于DWG、DXF等格式&#xff0c;而且不需要安装大型CAD软件即可使用。 主要特点包括…

齐护语音识别V2.1模块可自定义免编程学习唤醒词指令词自带IO实现人机对话 Arduino C编程图形化Mixly Scratch编程

齐护离线语音识别模块可免编程自定义学习唤醒词及识别词 固件V2.1 齐护语音识别V2.1模块可自定义免编程学习唤醒词指令词自带IO实现人机对话 Arduino C编程图形化Mixly Scratch编程 此固件&#xff08;程序/功能&#xff09;为自学习V2.1版本&#xff0c;在基础版本的上去除【变…