当前位置: 首页 > news >正文

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);

http://www.mrgr.cn/news/6733.html

相关文章:

  • idea2024设置中文
  • 动态规划之买卖股票篇-代码随想录算法训练营第三十八天| 买卖股票的最佳时机ⅠⅡⅢⅣ,309.最佳买卖股票时机含冷冻期,714.买卖股票的最佳时机含手续费
  • WebSocket、Socket和Netty的关系
  • Qt5.14.2 多边形与多边形求交集
  • AI大模型独角兽 MiniMax 基于 Apache Doris 升级日志系统,PB 数据秒级查询响应
  • 常微分方程的项源(source term)
  • 【Docker】Docker学习02 | docker-cli的基本命令
  • Application实际在云原生中的应用
  • 在Logback中配置`requestId`进行日志追踪的实践与应用
  • Github 2024-08-24 Rust开源项目日报 Top10
  • Linux数据相关第1个服务_备份服务rsync
  • Spring Boot 全局异常@ControllerAdvice和@RestControllerAdvice的区别
  • 【Hot100】LeetCode—98. 验证二叉搜索树
  • 2024河南萌新联赛第五场 A日历游戏(SG函数)
  • MyBatis 源码解读:MyBatis 核心架构与模块总览
  • 手机录音怎么降噪提取人声?四种高效提取人声的软件介绍!
  • C++ | Leetcode C++题解之第368题最大整除子集
  • idea git使用
  • 探索大语言模型在DNA 分析到表达预测以及生物信息学应用
  • Tutorial:Deep Learning for Remote Sensing Data