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学习 (五)发布-订阅模式 的相关文章

  • NanoMsg (NNG) 和 FlatBuffers 是否适合该项目?

    大声喊出我们是否应该考虑更好的事情 我正在寻找一种非常快速且简单的方法来获取多个程序 例如 5 个 每个程序都在私有 OpenStack 云上的单独节点上运行以相互通信 数据包将是短 C 结构 小于 100 字节 交通流量将会较少 可能低于
  • Ratchet PHP WAMP - React / ZeroMQ - 特定用户广播

    Note 这是not与这个问题 https stackoverflow com questions 17583903 how to get the connection object of a specific user它利用Message
  • zmq::message_t发送后可以重复使用吗?

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

    我需要使用 ZeroMQ 推拉套接字模式用 C 编写客户端 服务器应用程序 客户端必须对服务器接口中指定的函数进行 RPC 调用 我想知道是否有一个开源且商业可用的库 框架主要用于此目的 主要是 C 我做了一些谷歌搜索 似乎有一些用 pyt
  • 无回复请求的 ZMQ 模式

    我使用 ZMQ 允许客户端连接到服务器并向其发送命令 命令传入的频率很高 不需要任何回复 我正在考虑使用 REQ REP 套接字 但发送空回复感觉很浪费 我不想使用 PUB SUB 或 PUSH PULL 因为我希望客户端启动连接 是否有比
  • Pyinstaller 运行具有 pyzmq 依赖项的脚本时出错

    这是我的第一篇 StackOverflow 帖子 我在创建具有 pyzmq v22 0 2 依赖项的 pyinstaller v4 2 可执行文件时遇到问题 我通过运行 pyinstaller main py 创建了一个可执行文件 dist
  • 使用 ZeroMQ 实现消息总线

    我必须开发一个消息总线 供进程相互发送和接收消息 目前 我们正在Linux上运行 并计划稍后移植到其他平台 为此 我使用 TCP 上的 ZeroMQ 该模式是带有转发器的 PUB SUB 我的总线作为一个单独的进程运行 所有客户端都连接到
  • 为没有 ZeroMQ 绑定的语言创建 IPython 的语言内核

    有some http andrew gibiansky com blog ipython ipython kernels 有趣的描述 https stackoverflow com questions 22782028 ipython la
  • 为什么 Zeromq 不能在本地主机上工作?

    这段代码效果很好 import zmq json time def main context zmq Context subscriber context socket zmq SUB subscriber bind ipc test su
  • Python 多处理问题?

    我有一个包含 500 个输入文件的文件夹 所有文件的总大小约为 500 MB 我想写一个python执行以下操作的脚本 1 将所有输入文件加载到内存中 2 初始化一个空的python稍后将使用的列表 参见项目符号 4 3 启动 15 个不同
  • php-zmq 未显示在 phpinfo() 页面上

    我在 Windows 上使用 Wamp Server 并安装了 zmq 库 当我在控制台上编写 php info 时 我看到 zmq 显示为已安装 zmq ZMQ 扩展 gt 已启用 ZMQ 扩展版本 gt 1 1 2 libzmq 版本
  • Python ZeroMQ PUSH/PULL——丢失消息?

    我正在尝试使用python with zeroMQ in PUSH PULL模式 发送大小的消息4 MB 每隔几秒钟 由于某种原因 虽然看起来所有消息都已发送 但服务器似乎只收到了其中一些消息 我在这里缺少什么 这是客户端的代码 clien
  • 应用程序在 iOS 6 上崩溃:找不到符号:___sync_fetch_and_add_4

    我有一个与 iOS4 和 iOS5 完美配合的应用程序 它使用针对 ARM 的 Zeromq 库的静态编译版本 Apple 拒绝了我的应用程序 因为他们声称它在 iOS 6 下崩溃 尚未发布 wth 在使用 iOS 6 GM 尝试之后 我可
  • 无法获取 ZeroMQ python 绑定来通过 IPC 接收消息

    我正在尝试通过 IPC 实现 PUB SUB 如果我更改下面的代码 以便订阅者绑定到 tcp 5000 并且发布者连接到 tcp localhost 5000 它可以工作 但我无法让它通过 IPC 工作 我究竟做错了什么 订阅者 py im
  • 我需要做什么才能让 ZMQ_RADIO / ZMQ_DISH 正常工作?

    我正在尝试使用 ZMQ 草案规范ZMQ RADIO and ZMQ DISH 我用 CMake 构建了 libzmq 和 cppzmqExternalProject和旗帜ENABLE DRAFTS ON并验证它是使用草稿建造的zmq has
  • ZMQ 模式经销商/路由器心跳

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

    我有两个简单的组件 它们应该使用 REQ REP ZeroMQ 模式相互通信 服务器 REP Socket 是使用 pyzmq 在 Python 中实现的 import zmq def launch server print Launchi
  • Redis Cluster 与 Pub/Sub 中的 ZeroMQ,用于水平扩展的分布式系统

    如果我要设计一个巨大的分布式系统 其吞吐量应随系统中的订阅者数量和通道数量线性扩展 哪个会更好 1 Redis集群 仅适用于Redis 3 0 alpha 如果是集群模式 您可以在一个节点上发布并在另一个完全不同的节点上订阅 消息将传播并到
  • Python 3.6 ZeroMQ (PyZMQ) asyncio pub sub Hello World

    我刚刚开始使用 ZeroMQ 我正在尝试让 Hello World 在 Python 3 6 中与 PyZMQ 和 asyncio 一起使用 我试图将模块的功能与发布 订阅代码分离 因此有以下类设置 Edit 1 最小化示例 Edit 2
  • 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