【从零开始一步步学习VSOA开发】订阅发布变速器

news2025/2/23 12:06:24

订阅发布变速器

概念

在许多场景中,我们需要控制发布频率。例如,一个 UI 界面不能过快的接收处理信息,而此时发布者的发布频率又非常快。在这种场景下,我们需要改变发布的频率。
使用 VSOA Regulator 可以解决这个问题,它既可以使用在服务端,也可以使用在客户端。

例程

我们在原 axis 试验客户端程序基础上进行修改,原发布频率是每秒一次,我们使用变速器改为 5 秒一次。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/select.h>
#include "vsoa_client.h"
#include "vsoa_cliauto.h"
#include "vsoa_regulator.h"

#define MY_SERVER_PASSWD                    "123456"

static vsoa_regulator_t* regulator;

static void onmessage (void *arg, struct vsoa_client *client, vsoa_url_t *url, vsoa_payload_t *payload, bool quick)
{
    printf("subscribe message, url:%.*s, quick:%s\n",
            (int)url->url_len, url->url,
            quick ? "ture":"false");

    printf("subscribe message, param:%.*s, data:%.*s\n",
               (int)payload->param_len, payload->param,
               (int)payload->data_len, (char *)payload->data);

    vsoa_regulator_update(regulator, url, payload);
}

static void slow_onmessage (void *arg, vsoa_url_t *url, vsoa_payload_t *payload)
{
    printf("slow subscribe message, url:%.*s\n",
            (int)url->url_len, url->url);

    printf("slow subscribe message, param:%.*s, data:%.*s\n",
               (int)payload->param_len, payload->param,
               (int)payload->data_len, (char *)payload->data);
}

int main (int argc, char **argv)
{
    vsoa_client_auto_t *cliauto;
    static char *sub_urls[] = { "/axis" };
    struct timespec period = { 5, 0 };
    vsoa_url_t      url;

    /*
     * 创建并注册发布订阅变速器,每5秒处理器一次订阅
     */
    regulator = vsoa_regulator_create(&period);
    url.url = "/axis";
    url.url_len = strlen(url.url);
    vsoa_regulator_slot(regulator, &url, slow_onmessage, NULL, 1024);

    /*
     * 创建客户端机器人
     */
    cliauto = vsoa_client_auto_create(onmessage, NULL);

    vsoa_client_auto_consistent(cliauto, sub_urls, 1, 1000);
    /*
     * 启动客户端机器人127.0.0.1:4001  vsoa://axis_server
     */
    vsoa_client_auto_start(cliauto, "vsoa://axis_server", MY_SERVER_PASSWD, sub_urls, 1, 1000, 1000, 1000);

    while (true) {
        sleep(1);
    }
}

运行效果

服务端运行效果:
image.png
客户端运行效果:
image.png
可以看到每 5 次正常订阅处理就会有一次降速处理。如果实际项目不需要正常处理,只需要去掉正常处理回调的业务程序即可,但要保留vsoa_regulator_update 函数调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1991112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka + Kraft 集群搭建教程,附详细配置及自动化安装脚本

本文主要介绍 kafka kraft 搭建过程&#xff0c;主要用途是为了日志采集&#xff0c;所以搭建相对比较简单暴力&#xff0c;不过也可以作为一个参考供大家学习&#xff0c;主打一个能用管跑&#xff08;调优啊&#xff0c;参数解释啊&#xff0c;原理啊&#xff0c;太枯燥了&a…

其实PMP考试真的不需要焦虑

在考PMP之前&#xff0c;觉得报名费好贵很可怕&#xff0c;很怕自己考不过然后3900打水漂~然后我自己慢慢悠悠跟着老师安排来&#xff0c;2个月就上岸啦~担心真的是多余的&#xff01; 问了一下培训班的小伙伴&#xff0c;好像都过了。听说PMP在国内的通过率高达90%不知道真假…

高频焊机电源模型建立及谐波分析

1、仿真建模工具 本文的仿真建模工具软件采用MATLAB7.0&#xff0c;即目前工程领域最为流行的软件。MATLAB把计算、可视化、程序设计融入到了一个交互的工作环境中&#xff0c;已经成为电力系统仿真、自动控制理论、数字信号处理、图像处理等领域的常用工具软件。MATLAB中的SIM…

解锁数据“智能”背后的秘密

在这个被数据洪流包围的时代&#xff0c;每一秒都有无数的信息在生成、传递、分析。但你是否曾好奇&#xff0c;这些数据是如何从简单的数字、文字转化为推动社会进步、改变生活方式的“智能”力量的&#xff1f;今天&#xff0c;就让我们一起揭开数据“智能”背后的神秘面纱&a…

在Excel中启用宏 (~ ̄▽ ̄)~

一、启用宏 打开任意Excel&#xff0c;点击屏幕左上角的文件选项&#xff0c;然后选择Excel选项窗口。在Excel选项窗口中&#xff0c;选择信任中心按钮&#xff1b;在信任中心设置窗口中&#xff0c;选择宏设置&#xff0c;启用所有宏&#xff08;不推荐&#xff0c;潜在风险&a…

鸿蒙OS开发使用Canvas组件绘制天气曲线图

参考下文&#xff1a; 鸿蒙征文 | 使用Canvas组件绘制天气曲线图_harmonyos_鸑鷟407-HarmonyOS开发者社区效果图&#xff1a; 原理 使用贝塞尔曲线 首先可以了解一下贝塞尔曲线。 如果看不懂也没关系&#xff0c;这里会直接讲绘制曲线的步骤。 使用CanvasRenderingContext2D对象…

VS code初学笔记

一、调试 1.1添加查看全部数组元素 监视->*(type(*)[number])begin 其中type表示类型int、char等。number表示要查看的数量。begin是起始地址指针&#xff0c;即数组名。

github使用gh-pages部署vue静态网站(简单易懂)

github使用gh-pages部署vue静态网站 当我们想把自己的网站部署到一个静态网站上&#xff0c;Github Pages是一个很好的选择&#xff08;稳定、可靠、不花钱&#xff09; 假设你已经有一个项目并且已经发布到github上了&#xff0c;先把项目git clone到本地 &#xff0c;接着在…

第二季度云计算市场份额榜单:微软下滑,谷歌上升,AWS仍保持领先

2024 年第二季度&#xff0c;随着企业云支出达到 790 亿美元的新高&#xff0c;三大云计算巨头微软、谷歌云和 AWS的全球云市场份额发生了变化。 根据新的市场数据&#xff0c;以下是 2024 年第二季度全球云市场份额结果和六大世界领先者&#xff0c;其中包括 AWS、阿里巴巴、…

条形码与二维码报表

概述 条形码与二维码&#xff1a;演示条形码与二维码&#xff0c;条形码数据将来自于关联的字段值。支持各种常用的条形码与二维码。 应用场景 如下图所示&#xff0c;简单展示数据 示例说明 数据准备 在数据面板中添加数据集&#xff0c;可选择Json数据集和API服务数据…

​全国大学分布SHP数据分享

数据是GIS的血液&#xff01; 我们在《全国地铁路线及站点SHP数据》一文中&#xff0c;为你分享过全国地铁路线及站点数据。 现在再为你分享全国大学信息分布SHP数据&#xff0c;你可以在文末查看该数据的领取方法。 全国大学分布数据 据不完全统计至2024年6月20日&#xf…

护眼落地灯十大品牌排名:2024十大值得入手的护眼落地灯盘点

2024十大值得入手的护眼落地灯是哪款&#xff1f;随着生活水平的提高&#xff0c;许多家长在关心孩子身心健康的同时也关注着孩子的视力健康&#xff0c;很多家长了解到光线对孩子视力的影响&#xff0c;都纷纷给孩子准备护眼大路灯&#xff0c;但是面对市面上众多的护眼大路灯…

Java HotSpot虚拟机中的内存管理手册阅读笔记

显示与自动内存管理 内存管理是计算机编程中的一个重要概念&#xff0c;它涉及到跟踪和控制程序使用内存的方式。内存管理可以分为两种主要类型&#xff1a;显式内存管理和自动内存管理。 显式内存管理 在显式内存管理系统中&#xff0c;程序员必须手动分配和释放内存。这通…

筒射巡飞无人机技术详解

筒射巡飞无人机&#xff08;Launch and Recovery by Tube, LRAT&#xff09;作为一种新型无人机系统&#xff0c;其机体结构设计充分考虑了便携性、隐蔽性及空气动力学效率。该无人机通常采用模块化设计&#xff0c;主体结构紧凑&#xff0c;能够适配于标准发射筒内进行发射与回…

CISP和NISP到底啥区别?网络安全行业考证必知

随着网络攻击的日益频繁和复杂化&#xff0c;信息安全专业人才的需求也随之激增。 在众多信息安全认证中&#xff0c;CISP与NISP尤为受到关注&#xff0c;不少搞安全的朋友应该都对他们有所耳闻。 但在选择认证时&#xff0c;往往又犯了难。 这两个安全认证的差别在哪里&#x…

基于Hadoop的PM2.5分布可视化系统设计

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍引言研究背景国内外研究现状研究目的研究意义 关键技术理论介绍Hadoop相关组件介绍分布式集群介绍 Hadoop集群搭建及数据准备Hadoop全套组件搭建数据集介绍数据预处理 Hadoo的PM2.5…

U盘中毒后文件乱码?数之寻软件助你高效恢复数据

一、U盘中毒与文件乱码的困扰 在数字化时代&#xff0c;U盘作为便携式存储设备&#xff0c;广泛应用于数据传输与备份中。然而&#xff0c;U盘在方便我们生活与工作的同时&#xff0c;也面临着诸多安全风险。其中&#xff0c;U盘“中毒”导致的文件乱码问题尤为常见&#xff0…

NDI导播系统Multiview Pro使用初探

目录 一、软件安装 二、系统启动 三、登录系统 四、开始使用 我一直推崇NDI,这是一项非常好的技术,它实现了全IP的高质量流媒体传输方案,越来越多的专业机构都用上了这项技术。 偶然机遇,发现了一款NDI相关的工具Multiview Pro,让我眼前一亮。 刚开始望文生义,以为就…

css实现两个字和三个字的两端对齐

第一种实现方式&#xff1a; css设置如下&#xff1a; <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8"> <title>两端对齐示例</title> <style>.name {width: 100px;text-align: justify;}.nam…

【Linux】信号|Core|Term|raise|abort|硬件异常|软件异常|signal信号

目录 ​编辑 前言 一&#xff0c;信号的概念 1.1信号的处理 1.2信号列表 1.3信号的存储 1.4查看信号 二&#xff0c;Core和Term 2.1生成Core文件 三&#xff0c;初识捕捉信号 3.1signal函数 四&#xff0c;产生信号的方式 4.1通过终端按键产生信号 4.2调用系统函…