ZeroMQ“发布/订阅”模型的C++代码

2023-05-16

     ZeroMQ环境的搭建就不说了,之前已经说过。

     来看ZeroMQ的“发布/订阅”模型的C++代码:

     pub.cpp代码为:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <string.h>
#include "zmq.h"

int main()
{
    void* context = zmq_ctx_new();
    assert(context != NULL);

    void* publisher = zmq_socket(context, ZMQ_PUB);
    assert(publisher != NULL);

    int ret = zmq_bind(publisher, "tcp://*:5555");
    assert(ret == 0);

    int i = 0;
    while(1)
    {
        char szBuf[1024] = {0};
        snprintf(szBuf, sizeof(szBuf), "server i=%d", i);
        ret = zmq_send(publisher, szBuf, strlen(szBuf) + 1, 0);
        i++;

        sleep(1);
    }

    zmq_close (publisher);
    zmq_ctx_destroy (context);

    return 0;
}

        sub.cpp代码为:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include "zmq.h"

int main()
{
    printf("Hello world!\n");

    void* context = zmq_ctx_new();
    assert(context != NULL);

    void* subscriber = zmq_socket(context, ZMQ_SUB);
    assert(subscriber != NULL);

    int ret = zmq_connect(subscriber, "tcp://localhost:5555");
    assert(ret == 0);

    ret = zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, "", 0);
    assert(ret == 0);

    while(1)
    {
        printf("into while\n");
        char szBuf[1024] = {0};
        ret = zmq_recv(subscriber, szBuf, sizeof(szBuf) - 1, 0);
        if (ret > 0)
        {
            printf("%s\n", szBuf);
        }
    }

    zmq_close(subscriber);
    zmq_ctx_destroy(context);

    return 0;
}

        先启动发布者的话, 订阅者会错过部分消息,无法挽回。

        来看看实际效果(开启了1个发布者和2个订阅者):

ubuntu@VM-0-15-ubuntu:~/taoge/zmq/test$ ./server 
ubuntu@VM-0-15-ubuntu:~/taoge/zmq/test$ ./client 
Hello world!
into while
server i=21
into while
server i=22
into while
server i=23
ubuntu@VM-0-15-ubuntu:~/taoge/zmq/test$ ./client 
Hello world!
into while
server i=57
into while
server i=58
into while
server i=59

        OK, 不多说。

 

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

ZeroMQ“发布/订阅”模型的C++代码 的相关文章

  • 无法安装 PyZMP for Python -- 依赖项

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

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

    大声喊出我们是否应该考虑更好的事情 我正在寻找一种非常快速且简单的方法来获取多个程序 例如 5 个 每个程序都在私有 OpenStack 云上的单独节点上运行以相互通信 数据包将是短 C 结构 小于 100 字节 交通流量将会较少 可能低于
  • zmq::message_t发送后可以重复使用吗?

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

    我正在 Windows 10 上开发 Wampserver 我正在使用名为 ZMQ 的扩展 我从以下位置下载了 DLLS https pecl php net package zmq 1 1 3 windows https pecl php
  • 防火墙上需要哪些开放端口才能允许 salt-stack 远程执行?

    saltstack 上的文档似乎不清楚 salt master gt salt minion 需要哪些端口 显然不需要 它建议只需要从 salt minion gt salt master 打开端口 看 http docs saltstac
  • 为什么 Mono 上的 NetMQ DealerSocket 在 Debian Wheezy 上不向服务器发送消息,但在 Windows 上却发送消息?

    我在 Debian Wheezy 上的 Mono 4 8 上使用 NetMQ 4 0 0 1 时遇到一些问题 经销商套接字不会发送任何消息 直到我不会停止调用它来发送新消息 当我将Thread Sleep 1000 在创建任务之间比一切都好
  • Linux重启后nodejs消失了

    我刚刚使用 nvm 安装了 nodejs 版本 0 10 14 它安装成功 同样在安装nodejs之前 我安装了zeromq版本2 2 0 出于测试目的 我尝试运行下面的基本酒吧示例 var zmq require zmq var sock
  • 具有自定义负载平衡的 ZMQ 套接字

    我研究了 ZMQ PUSH PULL 套接字 尽管我非常喜欢这种简单性 特别是与我现在在 UDP 套接字上的系统中实现的自定义碎片 ack 相比 但我希望使用自定义负载平衡 而不是简单的循环 robin 我相信 ZMQ PUSH PULL
  • jeromq 生产准备好了吗?

    我过去曾通过 JVM 应用程序使用 ZeroMQjzmq图书馆 我计划在一个新项目中使用 Zeromq 其中一些服务是在 JVM 上实现的 我刚刚发现jeromq https github com zeromq jeromq 一个 Zero
  • 了解 Zeromq Java 绑定

    我正在研究 Zeromq 作为 Java 项目中的消息传递解决方案 但我发现有关 Java 绑定的说明有点难以遵循 http www zeromq org bindings java http www zeromq org bindings
  • 负载测试 ZeroMQ (ZMQ_STREAM) 以查找它可以处理的最大并发用户数

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

    我在 Mac 上使用 Xamarin Studio clrzmq通过 NuGet 包含 libzmq dll 上的 clrzmq 引用 我的应用程序编译得很好 但是当我尝试运行它时 我得到了这个 Unhandled Exception Sy
  • 无法获取 ZeroMQ python 绑定来通过 IPC 接收消息

    我正在尝试通过 IPC 实现 PUB SUB 如果我更改下面的代码 以便订阅者绑定到 tcp 5000 并且发布者连接到 tcp localhost 5000 它可以工作 但我无法让它通过 IPC 工作 我究竟做错了什么 订阅者 py im
  • 将 ZeroMQ 与 C# 和 inproc 传输一起使用

    我正在尝试 ZeroMQ 并试图得到某物在职的 我的第一个想法是使用 inproc 传输设置 REP REQ 看看是否可以在两个线程之间发送消息 下面的大部分代码取自 clzmq 示例 但它似乎不起作用 服务器和客户端都绑定到传输 但是当客
  • 是否可以在 Arduino 上运行 ZeroMQ

    我想知道是否可以通过 ZeroMQ 与 Arduino 进行通信 我想使用 Arduino 来控制一些设备 并希望将大部分应用程序放在计算机上 为此 如果 Arduino 和控制器可以通过 Zeromq 以及 WiFi 或以太网扩展板进行通
  • 如何将数据从 C# 推送到 ZeroMQ 并从 Node.JS 拉取,反之亦然?

    Scenario 我正在尝试发送数据 例如String类型 通过 ZeroMQ 从 C 控制台应用程序到 Node JS 服务器 信息 分别对 C 使用 clrzmq 对 C 和 Node JS 使用 ZeroMQ 库 我有能力执行推拉 h
  • AttributeError:“str”对象没有属性“decode”

    我将使用 pip 软件包安装程序在我的电脑上安装 ZeroMQ 库 我用https learning 0mq with pyzmq readthedocs org en latest pyzmq basics html installati
  • Heroku 上的 ZeroMQ

    为什么 Heroku 上不存在它 我想使用 Akka 和分布式队列系统让参与者在不同的测功机上进行通信 RabbitMQ 似乎并不是使用 Akka 的最佳选择 因为需要很多技巧才能与 actor 无缝协作 而不用担心底层队列 尽管如此 最好
  • Python zmq SUB 套接字未接收 MQL5 Zmq PUB 套接字

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

随机推荐