ZeroMQ---订阅发布模式

2023-05-16

概述

ZeroMQ的订阅发布模式是一种单向的数据发布,当客户端向服务端订阅消息之后,服务端便会将产生的消息源源不断的推送给订阅者。
一个发布者,多个订阅者的关系(1:n),当发布者数据变化时发布数据,所有订阅者均能够接收到数据并处理,这就是发布/订阅模式。

发布者使用PUB套接字将消息发送到队列中,订阅者使用SUB套接字从队列中源源不断的接收消息。新的订阅者可以随时加入,但之前的消息是无法收到的。已有的订阅者可以随时退出。订阅者还可以增加“过滤器”用来有选择性的接收消息。

代码

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* socket = zmq_socket(context, ZMQ_PUB); // 
   assert(socket != NULL);
   
   int ret = zmq_bind(socket, "tcp://*:8080");
   assert(ret == 0);
   
   int i = 0;
   while(1)
   {
       char szBuf[1024] = {0};
       snprintf(szBuf, sizeof(szBuf), "server i=%d", i);
       ret = zmq_send(socket, szBuf, strlen(szBuf) + 1, 0);
       i++;
       //sleep(1);
   }
   zmq_close (socket);
   zmq_ctx_destroy (context);
   return 0;
}
sub.cpp

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

using namespace std;

#define TRUE 1

void Recv(void* arg)
{
	while(TRUE)
	{
		void* socket = arg;
		printf("sub while\n");
		char szBuf[1024] = {0};
		int ret = zmq_recv(socket, szBuf, sizeof(szBuf)-1,0);
		if (ret > 0)
		{
			printf("Recv:%s\n", szBuf);
		}
	}
}

void Recv2(void* arg)
{
	while(TRUE)
	{
		void* socket = arg;
		printf("sub while\n");
		char szBuf[1024] = {0};
		int ret = zmq_recv(socket, szBuf, sizeof(szBuf) - 1, 0);
		if (ret > 0)
		{
			printf("Recv2:%s\n", szBuf);
		}
	}
}

int main()
{
    printf("Hello zeromq!\n");
    
    void* context = zmq_ctx_new();
    assert(context != NULL);

    void* socket = zmq_socket(context, ZMQ_SUB);
    assert(socket != NULL);
    
    int ret = zmq_connect(socket, "tcp://localhost:8080");
    assert(ret == 0);
    
    // 使用SUB设置一个订阅时,必须使用zmq_setsockopt()对消息进行过滤
    ret = zmq_setsockopt(socket, ZMQ_SUBSCRIBE, "", 0);
    assert(ret == 0);
    
	thread t1(Recv,socket);
	thread t2(Recv2,socket);
/*
    while(1)
    {
        printf("pub while\n");
        char szBuf[1024] = {0};
        ret = zmq_recv(socket, szBuf, sizeof(szBuf) - 1, 0);
        if (ret > 0)
        {
            printf("%s\n", szBuf);
        }
    }
 */
	t1.join();
	t2.join();
	
    zmq_close(socket);
    zmq_ctx_destroy(context);
    
    return 0;
}

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

ZeroMQ---订阅发布模式 的相关文章

  • ZMQ PUB 发送文件

    我第一次尝试 PY ZMQ 想知道是否可以使用 PUB SUB 发送完整的文件 二进制 我需要向许多订阅者发送数据库更新 我看到了短信的示例 但没有看到文件 是否可以 出版商 您应该能够使用 zmq 和 PUB SUB 模式将文件分发给多个
  • Ratchet PHP WAMP - React / ZeroMQ - 特定用户广播

    Note 这是not与这个问题 https stackoverflow com questions 17583903 how to get the connection object of a specific user它利用Message
  • PHP ZMQ 扩展:无法加载动态库

    我正在 Windows 10 上开发 Wampserver 我正在使用名为 ZMQ 的扩展 我从以下位置下载了 DLLS https pecl php net package zmq 1 1 3 windows https pecl php
  • 在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
  • 适用于 Windows 的 Zeromq PHP 扩展

    我正在使用配置了 IIS 7 5 的 Zend 服务器 我搜索了 edit Zeromq php 扩展 我找到了这些http valokuva org builds http valokuva org builds and http sna
  • React/ZMQ/Ratchet - Websocket 服务器响应

    我目前已经有一个正在运行并使用 Ratchet PHP 的 Web 套接字服务器 我还没有处于希望外部脚本与我的服务器进行通信的阶段 我可以使用 ZMQ 成功地将数据推送到它 push php json name gt Joe Bloggs
  • Linux重启后nodejs消失了

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

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

    有人有从 Python 外部与 IPython 内核通信的经验吗 如果我尝试将消息从 Python 应用程序发送到 IPython 内核 我会使用zmq kernelmanager https github com ipython ipyt
  • 为没有 ZeroMQ 绑定的语言创建 IPython 的语言内核

    有some http andrew gibiansky com blog ipython ipython kernels 有趣的描述 https stackoverflow com questions 22782028 ipython la
  • 为分布式系统构建数据收集和监控的中间件[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我目前正在寻找一个好的中间件来构建监控和维护系统的解决方案 我们面临的挑战是监控 收集数据并维护由多达
  • NODE_MODULE_VERSION 46。此版本的 Node.js 需要 NODE_MODULE_VERSION 64。请尝试重新编译或重新安装

    我正在尝试执行提供给我的节点应用程序 它应该可以正常工作 我已尝试运行它 但无法修复此错误 seba vps92941 services drivetech node awto js home seba services drivetech
  • 异步任务。哪种架构? (或 ZeroMQ 中的模式)

    我希望 Linux 服务器 主机上的一个应用程序与虚拟机中 Win7 客户端 上的应用程序进行通信 选择的库是 ZeroMQ 但如何管理异步任务呢 让我举个例子吧 VM 中的应用程序以任意时间间隔生成任务并将其发送到 Linux 盒子 这将
  • 了解 Zeromq Java 绑定

    我正在研究 Zeromq 作为 Java 项目中的消息传递解决方案 但我发现有关 Java 绑定的说明有点难以遵循 http www zeromq org bindings java http www zeromq org bindings
  • 如何使 Zeromq PUB/SUB 删除旧消息而不是新消息(用于实时提要)?

    说我有一个PUB服务器zmq send 的实时消息SUB客户 如果客户很忙而无法zmq recv 消息足够快 那么消息将在客户端 和 或服务器 中缓冲 如果缓冲区变得太大 高水位线 则新消息将被丢弃 对于实时消息来说 这与人们想要的相反 应
  • ZeroMQ套接字在什么情况下会丢弃或无法传递消息?

    是否有某种规范或其他解释来描述正常情况 对于每种通信类型 您可以预期在 ZeroMQ 套接字上发送的消息不会被 所有 侦听进程接收 例如 我有一个实验程序 它基本上假设所有订阅者PUB套接字接收在该套接字上发送的所有消息 在初始化握手之后
  • 无法在 ubuntu 19.04 上安装 libzmq3-dev

    我正在尝试安装libzmq3 dev on 乌班图19 04 使用命令 sudo apt install build essential libsocketcan dev libzmq3 dev 我收到消息 gt Some packages
  • ZeroMQ在多线程应用程序中处理中断

    多线程环境下ZeroMQ的优雅退出 规格 带有 c 11 的 ubuntu 16 04 libzmq 4 2 3 示例代码 static int s interrupted 0 static void s signal handler in
  • 在轮询器内异步运行代码

    在我的 ruby 脚本中 我使用 celluloid zmq gem 我尝试在轮询器内异步运行评估响应 使用 async evaluate response socket read multipart 但是 如果我从循环中删除睡眠 不知何故

随机推荐

  • 对抗样本(对抗攻击)入门

    什么是对抗样本 xff1f 从2013年开始 xff0c 深度学习模型在多种应用上已经能达到甚至超过人类水平 xff0c 比如人脸识别 xff0c 物体识别 xff0c 手写文字识别等等 在之前 xff0c 机器在这些项目的准确率很低 xf
  • 百度北京站2014研发笔试

    1 OSI七层模型 2 物理层 3 数据链路层 4 网络层 5 传输层 6 会话层 7 表示层 8 应用层 2 进程间数据共享的方式三种 文件映射 共享内存 信号 匿名管道 命名管道 邮件槽 剪贴板 3 TCP UDP区别 4 打印数组的所
  • VNC 设置屏幕分辨率

    http blog sina com cn s blog 7195909a01012ugl html 先前公司使用SecureCRT登陆linux写代码 xff0c SecureCRT缺点是交互式的 xff0c 网络状态不好时 xff0c
  • vsfpd配置说明

    是否允许匿名登录FTP服务器 xff0c 默认设置为YES允许 用户可使用用户名ftp或anonymous进行ftp登录 xff0c 口令为用户的E mail地址 如不允许匿名访问则设置为NO anonymous enable 61 YES
  • 正则表达式 ?: 的理解

    是 不想被捕获的时候使用 比如 a z 0 9 43 这个正则表达式里 里面的内容被捕获了 xff0c 反向引用的时候可以用上 一般正则替换的时候用的多 像UBB代码 但是 如果写成 a z 0 9 43 跟上面 正则表达式 整体匹配是一样
  • HDFS源码分析——DataNode启动流程

    DataNode启动流程 1 概述2 解析secureMain createDataNode instantiateDataNode makeInstance new DataNode startDataNode 2 1 initDataX
  • 在未知包名的情况下用ADB命令导出手机上对应的apk

    一 背景 很多时候 xff0c APK文件只存在于应用市场 xff0c 在PC上无法直接下载 用手机下载下来后就直接安装了 xff0c 也不能保存原始的APK文件 APK安装到手机后 xff0c Android系统会保存一份和原始APK一模
  • BP神经网络基础——推导过程

    彻底搞懂BP神经网络 理论推导 43 代码实现 xff08 C 43 43 xff09 哔哩哔哩 bilibili
  • 关于noVNC连接TightVNC黑屏问题

    noVNC连接TightVNC 2 8 8 黑屏问题 查阅大量资料才知道是bug 降低到tightvnc 2 6 0 setup 64bit 版本就解决了 赶快降版本吧 xff01 后面才发现不是这个问题 下载一个虚拟显示器软件 或者插一个
  • xrandr 常用命令 用于双显示器 切换屏幕

    xrandr常用命令 xff08 这里的VGA与LVDS分别换成第1步中的设备名 xff0c 如VGA1 LVDS1 xff09 xff1a xrandr output VGA same as LVDS auto 打开外接显示器 auto
  • Ubuntulinux离线安装ClamTk杀毒软件步骤和使用方法

    Ubuntulinux离线安装ClamTk杀毒软件步骤和使用方法 一 安装杀毒软件 1 拷贝杀毒软件所需安装包到主机 2 进入软件包目录下执行如下命令进行安装 xff1a sudo dpkg i libcurl4 7 68 0 1ubunt
  • 一步解决双系统时间不一致问题

    当你从Windows系统切换到Ubuntu系统时 xff0c 会发现时间居然便差了8个小时 xff0c 这是怎么回事 xff1f 相信很多和我一样初次体验双系统的小伙伴都会遇到这样的问题 xff0c 本人也是在网上看了很多解决办法 xff0
  • 最新Ubuntu系统 22.04.1 LTS版本 支持开启WIFI热点

    桌面操作系统一直是WIndows的天下 xff0c 但由于Linux系统的开源理念和众多开发者的共同努力 xff0c 诞生了很多基于Linux的开源操作系统 xff0c Ubuntu就是世界上最流行的Linux系统之一 xff0c Ubun
  • 电脑自动安装垃圾软件怎么办?拒绝重装系统,教你一招搞定!

    相信读到这篇文章的你也遭遇了和我一样的痛苦 xff0c 我非常理解 xff0c 希望我的这个方法能解决你的问题 我使用了各种杀毒软件 xff0c 各种管家 xff0c 各种安全卫士 xff0c 各种系统急救箱 xff0c 电脑安全模式下查杀
  • Python学习笔记(三)

    最近在学习慕课上的公开课 Python语言程序设计 xff0c 该课程是国家精品 xff0c 由来自北京理工大学的 嵩天团队精心打造 xff0c 讲解清晰 xff0c 层层递进 xff0c 想跟我一起学习的可点击蓝色课程名称直接跳转到该课程
  • 我的创作纪念日

    机缘 最开始是有了一台新电脑 xff0c 就想体验体验一下装机过程 xff0c 从硬件到软件 买的配件自己组装的电脑 xff0c 点亮电脑以后 xff0c 又装上了Windows系统 xff0c 后来又想体验一下Linux系统 xff0c
  • 国产ChatGPT之初体验

    ChatGPT的大火 xff0c 不仅让人惊讶现代人工智能的发展速度 xff0c 更让人增加了人类会不会被人工智能取代的担忧 ChatGPT属于NLP自然语言处理人工智能 xff0c 虽然仍然有很多不足 xff0c 但在其能力范围内 xff
  • GLPT团队程序设计天梯赛 模拟赛 2023

    L1 1 嫑废话上代码 span class token macro property span class token directive hash span span class token directive keyword incl
  • Matplotlib填充色Colormap

    Matplotlib填充色Colormap Matplotlib 有许多可通过 matplotlib cm get cmap 访问的内置 colormap 还有一些外部库有许多额外的颜色图 xff0c 可以在 Matplotlib 文档的第
  • ZeroMQ---订阅发布模式

    概述 ZeroMQ的订阅发布模式是一种单向的数据发布 xff0c 当客户端向服务端订阅消息之后 xff0c 服务端便会将产生的消息源源不断的推送给订阅者 一个发布者 xff0c 多个订阅者的关系 1 xff1a n xff0c 当发布者数据