ZMQ发布订阅模型

2024-08-24 10:28
文章标签 模型 发布 订阅 zmq

本文主要是介绍ZMQ发布订阅模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

案例一

发布者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);

这篇关于ZMQ发布订阅模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1102221

相关文章

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

Linux Mint Xia 22.1重磅发布: 重要更新一览

《LinuxMintXia22.1重磅发布:重要更新一览》Beta版LinuxMint“Xia”22.1发布,新版本基于Ubuntu24.04,内核版本为Linux6.8,这... linux Mint 22.1「Xia」正式发布啦!这次更新带来了诸多优化和改进,进一步巩固了 Mint 在 Linux 桌面

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验