ZeroMQ学习 (五)发布-订阅模式

2023-05-16

7 发布-订阅模式

​ 发布者不用管是否有订阅者,它只管不停的发布,也不用接受客户端的请求。多订阅者可以尝试链接发布者,来接受信息,但是不能往发布者发送请求。

发布者源码:

#include <zmq.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main (void)
{
    void *context = zmq_ctx_new();
    //  与客户端通信的套接字
    void *publisher = zmq_socket (context, ZMQ_PUB);
    zmq_bind (publisher, "tcp://*:5555");
    char buf[256];
    int i = 0;
    while (1)
    {
        sprintf(buf, "helloworld%d", i++);
        zmq_send (publisher, buf, strlen(buf),  0);
        sleep(1);
    }
    //  程序不会运行到这里,以下只是演示我们应该如何结束
    zmq_close (publisher);
    zmq_ctx_destroy (context);
    return 0;
}

订阅者源码:


#include <zmq.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main (void)
{
    void *context = zmq_ctx_new();
    void *subscriber = zmq_socket (context, ZMQ_SUB);
    /*订阅所有的内容*/
    zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, "", 0);
    zmq_connect (subscriber, "tcp://127.0.0.1:5555");


    while (1)
    {
        char buf[256];
        int ret = zmq_recv (subscriber, buf, sizeof(buf) - 1, 0);
        buf[ret] = '\0';
        printf ("recv msg %s\n", buf);

    }
    //  程序不会运行到这里,以下只是演示我们应该如何结束
    zmq_close (subscriber);
    zmq_ctx_destroy(context);
    return 0;
}

  1. 可以看到发布者只需要创建一个ZMQ的PUB套接字就能往所有的订阅者发布消息。

  2. 订阅者一定要通过 zmq_setsockopt设置ZMQ_SUBSCRIBE信息,来订阅需要的信息,否则收不到任何信息。

  3. 发布者不会等待订阅者是否已经链接上来就已经开始发布消息,所以订阅者有时候会收不到前面的一些信息,即使订阅者先运行,发布者后运行,还是会出现这种情况,因为TCP的三次握手总是需要时间。这个叫做订阅者与发布者的慢链接。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ZeroMQ学习 (五)发布-订阅模式 的相关文章

  • ZMQ PUB 发送文件

    我第一次尝试 PY ZMQ 想知道是否可以使用 PUB SUB 发送完整的文件 二进制 我需要向许多订阅者发送数据库更新 我看到了短信的示例 但没有看到文件 是否可以 出版商 您应该能够使用 zmq 和 PUB SUB 模式将文件分发给多个
  • 无法安装 PyZMP for Python -- 依赖项

    我在安装 iPython 的 PyZMP 依赖项时遇到问题 我尝试了很多方法 例如使用 pip brew 但最终还是使用手动安装包这个答案 Now pip list packages产生以下结果 pyzmq 14 2 0 dev pyzmq
  • Boost:反序列化通过 ZeroMQ 拉套接字传递的自定义 C++ 对象

    我在这里写的文字是我之前在另一个线程中打开的后续问题Boost 序列化 反序列化通过 ZeroMQ 拉套接字传递的自定义 C 对象 早期线程中的编译问题已通过使用文本存档类型而不是二进制存档解决 但现在我在反序列化时遇到运行时问题 为了您的
  • 在 Xamarin 中使用 ZeroMQ

    我有一个由服务器和客户端组成的应用程序 服务器是 C C 应用程序 客户端是面向 Windows Android 和 iOS 的跨平台 Xamarin 应用程序 服务器部分和客户端部分使用 ZeroMQ 消息进行通信 我尝试了当前的 C 实
  • PUB-SUB 的 ZMQ 延迟(慢订阅者)

    我发现了很多关于类似主题的问题 但它们并没有帮助我解决我的问题 Using Linux Ubuntu 14 04 蟒蛇3 4 zmq 4 0 4 pyZMQ 14 3 1 TL DR 即使设置了 HWM ZMQ SUB 套接字中的接收器队列
  • 如何使用 ZMQ 发送/接收通过 Protocol Buffers 序列化的二进制数据

    我需要在 ZMQ 套接字上发送一个对象 用 GPB 序列化 目前该代码有一个额外的副本 如何直接将序列化数组写入message ts data ABT CommunicationProtocol introPacket Fill the p
  • zmq::message_t发送后可以重复使用吗?

    我正在使用 ZeroMQ 来实现一个玩具通信协议 这是我第一次使用这个框架 库 现在 在我的协议中 某一方发送多个连续消息 所有消息都具有相同的大小 所以 我想 我会避免重新分配它们 而只是尝试用不同的内容重新填充消息数据缓冲区 例如 zm
  • 在ZeroMQ中获取TCP地址信息

    我想使用 ZeroMQ java 绑定 jzmq 将客户端连接到服务器 但我非常需要 TCP 信息 例如客户端请求的 TCP IP 地址 问题是 为了能够在网络中宣布服务 我需要获取请求的 TCP 地址 以便能够将客户端重定向到该服务 在这
  • Python 在从函数返回时挂起

    假设我在一个相当复杂的 Flask 应用程序中有两个函数 一个函数调用另一个函数 def dispatch unlock stuff log dis start this routine just sends some data over
  • Linux重启后nodejs消失了

    我刚刚使用 nvm 安装了 nodejs 版本 0 10 14 它安装成功 同样在安装nodejs之前 我安装了zeromq版本2 2 0 出于测试目的 我尝试运行下面的基本酒吧示例 var zmq require zmq var sock
  • 使用 ZeroMQ 实现消息总线

    我必须开发一个消息总线 供进程相互发送和接收消息 目前 我们正在Linux上运行 并计划稍后移植到其他平台 为此 我使用 TCP 上的 ZeroMQ 该模式是带有转发器的 PUB SUB 我的总线作为一个单独的进程运行 所有客户端都连接到
  • Zeromq:如何在 C++ 中访问 tcp 消息

    我是 ZeroMQ 的新手 正在学习 echo 客户端 服务器模式 请求 回复 的 C hello world 示例 服务器看起来像 Hello World server in C Binds REP socket to tcp 5555
  • 为什么 Zeromq 不能在本地主机上工作?

    这段代码效果很好 import zmq json time def main context zmq Context subscriber context socket zmq SUB subscriber bind ipc test su
  • php-zmq 未显示在 phpinfo() 页面上

    我在 Windows 上使用 Wamp Server 并安装了 zmq 库 当我在控制台上编写 php info 时 我看到 zmq 显示为已安装 zmq ZMQ 扩展 gt 已启用 ZMQ 扩展版本 gt 1 1 2 libzmq 版本
  • 负载测试 ZeroMQ (ZMQ_STREAM) 以查找它可以处理的最大并发用户数

    有没有人有任何实际场景对 ZMQ 套接字进行负载测试以获得最大数量 他们可以处理的 并发用户 不是吞吐量 看起来 ZeroMQ 在 FD 限制方面存在一些严重问题 场景是 有许多 Web 服务器框架吹嘘它们可以处理数百万个并发用户 现在 如
  • 是否可以在 Arduino 上运行 ZeroMQ

    我想知道是否可以通过 ZeroMQ 与 Arduino 进行通信 我想使用 Arduino 来控制一些设备 并希望将大部分应用程序放在计算机上 为此 如果 Arduino 和控制器可以通过 Zeromq 以及 WiFi 或以太网扩展板进行通
  • ZMQ 模式经销商/路由器心跳

    我在客户端有一个经销商套接字 它连接到服务器端的路由器套接字 我经常看到心跳机制 服务器定期向客户端发送消息 以便客户端知道自己是否正确连接到服务器 以便客户端在一段时间内没有收到消息时可以重新连接 例如这里的偏执海盗模式 http zgu
  • ZeroMQ可以用来接受传统的套接字请求吗?

    我正在尝试使用 ZeroMQ 重写我们的旧服务器之一 现在我有以下服务器设置 适用于 Zmq 请求 using var context ZmqContext Create using var server context CreateSoc
  • ZeroMQ 在 python 多处理类/对象解决方案中挂起

    我正在尝试将 Python pyzmq 中的 ZeroMQ 与多处理一起使用 作为一个最小的 不是 工作示例 我有一个服务器类和一个客户端类 它们都继承自multiprocessing Process 客户端作为子进程应向服务器子进程发送消
  • Python zmq SUB 套接字未接收 MQL5 Zmq PUB 套接字

    我正在尝试在 MQL5 中设置一个 PUB 套接字 并在 Python 中设置一个 SUB 套接字来接收消息 我在 MQL5 中有这个 include

随机推荐

  • vagrant学习总结

    一 vagrant是什么 vagrant是一款用来构建虚拟开发环境的工具 xff0c 非常适合各类语言来开发web应用 xff0c 代码在我机器上运行没有问题 将成为历史 可以通过vagrant将封装好的开发环境 xff0c 分发给开发人员
  • cas5.3.5错误锦集

    0 cas jar https repo maven apache org maven2 org apereo cas 1 票根 39 ST 7 yOPMHIBFVcx8iNRoDW rCzNgakLAPTOP E2N0LMKU 39 不符
  • 面向对象分析:如何建立动态模型?状态图(单个对象建模),状态是对影响对象行为的属性值的一种抽象,它规定了对象对( 输入事件 )的响应方式,

    对象模型建立后 就需要考察对象和关系的动态变化情况 面向对象分析设定对象和关系都具有生命周期 生命周期由许多阶段组成 每个阶段都有一系列的运行规律和规则 用来调节和管理对象的行为 对象和关系的生命周期用动态模型来描述 动态模型描述对象和关系
  • 信息系统项目管理师-信息文档与配置管理考点笔记

    历年考点分布 注 xff1a 博客 xff1a https blog csdn net badao liumang qizhi 关注公众号 霸道的程序猿 获取编程相关电子书 教程推送与免费下载 信息系统项目文档及其管理 软件文档的分类 3
  • new 对象加括号和不加括号的区别

    在new对象的时候有加上 xff0c 有不加 xff0c 不知道这个到底是什么区别 xff1f 比如 xff1a cpp view plain copy print CBase base 61 new CDerived CBase base
  • 结构程序设计的经典定义

    结构程序设计的经典定义如下所述 xff1a 如果一个程序的 代码块仅仅通过顺序 选择和循环这3种基本控制结构 进行连接 xff0c 并且每个代码块只有一个入口和一个出口 xff0c 则称这个程序是结构化的 如果只允许使用顺序 IF THEN
  • 总体设计启发性规则7条

    nbsp 启发性规则 7条 1 改进软件结构提高模块独立性 通过模块分解或合并 降低耦 合提高内聚 2 模块规模应该适中 过大的模块往往是由于分解不充分 过小 的模块将导致模块数目过多将使系统接口复杂 3 深度 宽度 扇出和扇入都应适当 深
  • SqlServer调用webapi和webService接口

    1 通过http协议post调用webapi接口 xff08 json数据格式 xff09 declare 64 ServiceUrl as varchar 1000 set 64 ServiceUrl 61 39 http 127 0 0
  • C语言和C++的区别是什么?8个点通俗易懂的告诉你

    有些初学的同学傻傻分不清其中的区别 xff0c 下面我将详细的讲解C语言和C 43 43 的区别点 帮助大家尽快的理解 1 关键字 蓝色标注为C语言关键字 xff0c C 43 43 继承了C语言的所有关键字 xff0c 以下红色标注为C
  • money 最小花费(spfa)

    问题描述 在n个人中 xff0c 某些人的银行账号之间可以互相转账 这些人之间转账的手续费各不相同 给定这些人之间转账时需要从转账金额里扣除百分之几的手续费 xff0c 请问A最少需要多少钱使得转账后B收到100元 输入格式 第一行输入两个
  • cpu优化-cpu亲和性

    cpu亲和性 taskset命令可以将进程绑核 格式为taskset p c cpu list pid xff0c 其中cpu list是数字化的cpu列表 xff0c 从0开始 多个不连续的cpu可用逗号连接 xff0c 连续的可用 连接
  • Homebrew安装慢,总是失败如何解决

    前言 如果使用Homebrew xff08 https brew sh xff09 官网提供的命令来进行下载的 xff0c 是从github上进行下载 xff0c 没有翻墙工具的话会比较慢 xff0c 甚至可能会下载失败 xff0c 所以我
  • 开源飞控APM与PIXHAWK

    一 APM 官网地址 xff1a http ardupilot org APM xff08 ArduPilotMega xff09 是在2007年由DIY无人机社区 xff08 DIY Drones xff09 推出的飞控产品 xff0c
  • Pixhawk解锁常见错误

    第一次解锁 xff0c 接上MP看着HUD的提示 xff0c 即飞行数据的界面 xff1a 一般的不成功解锁有以下的原因 xff08 网络整理 xff09 xff08 1 xff09 HUD显示 RC not calibrated xff1
  • 学习MySQL——单表查询

    文章目录 一 SQL语言规范二 基本的SELECT语句1 列的别名2 去除重复行3 空值参与运算4 着重号 96 96 5 显示表结构 三 运算符 比较运算符1 等号运算符 xff08 61 xff09 2 不等于运算符 xff08 lt
  • FreeRTOS-启动第一个任务

    FreeRTOS开始第一个任务源码分析 vTaskStartScheduler xff1a 1 创建一个空任务 xff1a 优先级为0 2 是否使用软件定时器 是的话 创建软件定时器 3 关闭中断 xff08 关中断操作的寄存器是BASEP
  • 我的2014个人总结——学习篇、工作篇、生活篇

    2013的个人总结在我印象当中是写过的 xff0c 2014已成为过去 xff0c 当我想回过头来看看我2013年的总结时 xff0c 奈何我已不知它的踪迹了 xff0c 所以决定以后的个人总结还是以博客的形式记录吧 xff01 平静下来
  • ubuntu vnc 已经配置好,一键开启,节省大家时间

    1 粘贴复制 自己找个目录复制过去 2 修改权限 sudo chmod 777 x0vncserver 3 开启 x0vncserver rfbport 61 5900 SecurityTypes 61 None 下载地址 xff1a ht
  • ArcGIS Engine许可突然用不了了或者localhost没有有效的许可管理器

    ArcGIS Engine许可突然用不了了或者localhost没有有效的许可管理器 在Arc Engine安装包中再重新安装一次许可管理
  • ZeroMQ学习 (五)发布-订阅模式

    7 发布 订阅模式 发布者不用管是否有订阅者 xff0c 它只管不停的发布 xff0c 也不用接受客户端的请求 多订阅者可以尝试链接发布者 xff0c 来接受信息 xff0c 但是不能往发布者发送请求 发布者源码 xff1a span st