基于topic的发布/订阅模式在UI程序中的应用

ESP32智能浇花 vscodeHaas开发 连接阿里云 mqtt订阅 毕设项目是做基于esp32智能浇花系统 首先应该明确开发使用的环境。因为python环境下开发较为快捷,所以选择在vscode下搭载haas阿里云框架,实现互联。 1.vscode下载haas框架 具体文章可见 docs/startup/ESP32_startup.md · AliOS Things/haas_lib_bundles_python - Gitee.com 在烧录时,找路径找了半天,要记住自己设置下载的路径 根据这篇文章,搭载好了框架 需要注意将这些信息修改为自己的内容 .. 阅读详情

在编写UI程序中通常会遇到以下问题:

1、  在交互过程中会有很多事件,这些事件的处理者与产生者之间的联系并不紧密。如:下载的文件完成、下载进度更新、游戏程序扫描完成等。

2、  有可能一个事件对应多个处理。

3、  这些事件通常与界面更新相关。为了避免多线程UI问题通常要在特定的线程(主线程)中调用事件相关的处理函数。

4、  事件描述对象可能要在多个线程中使用,并有可能被处理对象持有很长时间,因此内存的释放比较麻烦。

 

可以使用以下方式来解决上述问题:

1、  使用发布/订阅模式来解藕事件的产生者和事件的响应者之间的关联。

2、  使用单例模式建立全局的发布/订阅模式对象来统一处理这类事件,它的任务是提供单一的注册点并实现必要的线程切换。

3、  发布者和订阅者都以字符串形式的“topic”相互绑定,在订阅topic时可以使用类似“*”这种通配符。

4、  发布者和订阅者都知道事件描述对象的定义。

5、  通过事件描述对象继承自支持引用记数的CSharedPtrBase类来实现内存的释放。

 

思考:如何提高topic匹配的处理效率

 

以下是框架示例代码:

class CSharedPtrBase

{

public:

         virtual~CSharedPtrBase() {}

 

         virtuallong AddRef()

         {

                   returnm_RefCount.Inc();

         }

         virtualvoid Release()

         {

                   if(m_RefCount.Dec() == 1)

                            deletethis;

         }

         longGetRefCount()

         {

                   returnm_RefCount.Get();

         }

protected:

         CDefAtomicm_RefCount;

};

 

typedef std::tr1::function<void(constWString&, CSharedPtrBase*)> CTopicProcessor;

class CPublisher

{

public:

         staticCPublisher* instance(); // for singlton

         voidNotify(const WString& strTopic, CSharedPtrBase* pDetail);

         intSubscribe(const WString& strTopic, const CTopicProcessor& Processor);

         voidUnsubscribe(int iKey);

};

 

class CSubscriber

{

public:

         voidDownloadDone(const WString& strTopic, CSharedPtrBase* pDetail)

         {

                   cout<< strTopic << endl;

         }

};

 

int main(int argc, char *argv[])

{

         CSubscriberSubscriber;

         CPublisher::instance()->Subscribe(L"download_done*",std::tr1::bind(CSubscriber::DownloadDone, &Subscriber, _1, _2));

         CPublisher::instance()->Notify(L"download_donec:\\test.txt", NULL);

         return0;

}

Apache Kafka 使用:介绍Apache Kafka的基础使用方法,以及在Java程序中如何进行消息发布订阅的操作 Apache Kafka 简介 什么是Apache Kafka Kafka的基本架构概念(Producer, Consumer, Broker, Topic, Partition等) Apache Kafka 的基础使用方法 安装Apache Kafka 启动Kafka服务 创建Topic 使用命令行工具进行消息的发布订阅 在 Java 程序中使用 Apache Kafka Kafka Java客户端介绍 添加依赖库 消息发布(Producer) 创建 Producer 发送消息 关闭 Producer 阅读详情

相关推荐

逆向CarPlay协议时,除了USB主从切换,你还需要注意这3个关键点

本文深入探讨逆向CarPlay协议时的3个关键点,包括MFi协议背景、多通道协同工作机制和协议分析工具的高级过滤技巧。特别解析了USB主从切换后的复杂交互过程,帮助安全研究员和逆向工程师更好地理解CarPlay协议的核心机制与潜在安全研究切入点。

weixin_29164497的博客 342

topicmodels

nlpnlp自然语言处理 topoicmodels topic models

MultiOTP Credential Provider避坑指南:从安装到RDP双因素认证的全流程解析

本文详细解析了MultiOTP Credential Provider从安装到实现RDP双因素认证(MFA)的全流程,重点分享了Docker部署、Active Directory集成及网络级认证(NLA)兼容性等环节的实战避坑经验,旨在帮助运维人员高效、稳定地部署离线双因素认证方案,提升Windows远程桌面安全性。

weixin_29255731的博客 537

发布订阅topics

订阅模型-Topic Topic类型的Exchange与Direct相比,都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routing key 的时候使用通配符! Routingkey 一般都是有一个或多个单词组成,多个单词之间以”.”分割,例如: item.insert 通配符规则: `#`:匹配一个或多个词 `*`:匹配...

Leon_Jinhai_Sun的博客 829

mqtt--Topic主题

MQTT是基于topic发布消息的,发布者在发布消息时需要指定该消息发布在哪个topictopic最容易的理解方式是文件夹路径。如果有成千上万的不同类型的文件要保存,为了合理放置这些文件,需要创建一系列有层次性的文件夹来管理它们。发布消息就好比把文件保存到不同的文件夹下。 注意: topic名是大小写敏感的。 topic中的每个主题级别可以使用任何UTF-8字符 尽可能避免使用美元符开头。因为一般MQTT服务器都会使用开头。因为一般MQTT服务器都会使用开头。因为一般MQTT服务器都会使

果果的博客 1722

pubsub.js介绍以及基本使用方法介绍

PubSubJS 是一个用 JavaScript 编写的基于主题的 发布/订阅库。PubSubJS 有同步,所以主题是异步发布的。这有助于使您的程序保持可预测性,因为在消费者处理主题时,主题的发起者不会被阻止。

m0_73591473的博客 5423

利用JMS Topic发布/订阅消息

博客分类:  JMS JMS应用服务器WebXMLServlet  发布 / 订阅式的消息发送 在发布 / 订阅式的消息发送 中,一个发布者利用一个方法调用将每条消息发送给多个预订者。介于发布者和预 订者之间的是一台消息服务器。在JMS中,消息服务器被叫做“JMS提供者”。发布者发送消息到JMS提供者,预订者从JMS提供者接收消息。 下图演示了这一方案。

飞奔的小土豆@1024 2487

RabbitMQ Java搭建实战——发布订阅模式

前面2个案例中,只有3个角色: P:生产者,也就是要发送消息的程序 C:消费者:消息的接受者,会一直等待消息到来。 queue:消息队列,图中红色部分 而在订阅模型中,多了一个exchange角色,而且过程略有变化: P:生产者,也就是要发送消息的程序,但是不再发送到队列中,而是发给X(交换机) C:消费者,消息的接受者,会一直等待消息到来。 Queue:消息队列,接收消息、缓存消息。 Exchange:交换机,图中的X。一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、递.

qq_38063429的博客 502

RabbitMQ的Publish/Subscribe 发布订阅模式

RabbitMQ的Publish/Subscribe 发布订阅模式

weixin_42947972的博客 483

RabbitMQ消息中间件(四):工作模式发布订阅模式 (Publish/subscribe)

一、生产者Module (1)pom.xml (2)生产者类 二、消费者Module (1)pom.xml (2)消费者类 三、测试 (1)先启动消费者类,消费监听生产者消息。 (2)在启动生产者类生产消息,消费者消息消息,即控制台输出: ...

HaleyTiger的博客 1145

基于ZeroMQ的消息发布订阅示例程序

本人展示如何使用C++和ZeroMQ库实现一个简单的消息发布订阅系统。通过引用`zmq.hpp`(依赖于`zmq.h`),实现了服务端和客户端的消息通信。 服务端发布随机消息,而客户端根据类型进行订阅

Where there is life, there is hope. 914

zmq.rs实战教程:构建高性能发布/订阅(PUB/SUB)系统

zmq.rs是一个用Rust原生实现的ØMQ库,它提供了高效的消息传递机制,非常适合构建发布/订阅(PUB/SUB)系统。本教程将带你快速掌握如何使用zmq.rs构建一个高性能的PUB/SUB系统,让你轻松实现消息的发布订阅功能。 ## 一、准备工作:安装与环境配置 在开始之前,你需要先准备好开发环境。首先,确保你的系统中已经安装了Rust环境。如果还没有安装,可以按照Rust官方文档的指引

gitblog_00974的博客 804

MQTT 物联网协议 对接java并实现发布订阅

MQTT简介 MQ 遥测传输 (MQTT) 是轻量级基于代理的发布/订阅的消息传输协议,设计思想是开放、简单、轻量、易于实现。这些特点使它适用于受限环境。该协议的特点有: 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。 对负载内容屏蔽的消息传输。 使用 TCP/IP 提供网络连接。 小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量。 使用 Last...

weixin_38171468的博客 3423

观察者模式发布订阅

观察者模式重点在于 观察者和被观察者的对应关系,以及将被观察者的改变及时通知到相对应的观察者。 这样的模式基本上可以解决少量数据源的情景,在观察者和被观察者可能是多对多关系的情况下,强耦合的结构会让代码不够清晰,难以维护。 在《JavaScript设计模式》一书中,提到了Observer和Publish/Subscribe的区别。 Observer模式要求希望接收到主题同志的观察者(或对象)...

xuchishao的专栏 263

RabbitMQ 6 种工作模式 - (三)Pub/Sub 订阅模式

概念: 在订阅模型中,多了一个 Exchange 角色,而且过程略有变化: P:生产者,也就是要发送消息的程序,但是不再发送到队列中,而是发给X(交换机) C:消费者,消息的接收者,会一直等待消息到来 Queue:消息队列,接收消息、缓存消息 Exchange:交换机(X)。一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。到底如何操作,取决于Exchange的类型。 Exchange有常见以...

一颗小松丸的博客 680

科普文:软件架构设计之【消息队列技术选型:RabbitMQ| RocketMQ| Kafka】

几个比较常见的开源的消息队列中间件,选择消息队列产品的基本标准首先,必须是开源的产品;其次,这个产品必须是近年来比较流行并且有一定社区活跃度的产品,流行的产品与周边生态系统会有一个比较好的集成和兼容,比如, Kafka 和 Flink 就有比较好的兼容性,Flink 内置了 Kafka 的 Data Source,使用 Kafka 就 很容易作为 Flink 的数据源开发流计算应用。作为一款及格的消息队列产品,必须具备的几个特性包括:消息的可靠传递:确保不丢消息;

为无为,事无事,味无味。 1785

Kafka中的Topic

在Kafka中,Topic是消息的逻辑通道,生产者将消息发布Topic,而消费者从Topic订阅消息。每个Topic可以有多个分区(Partitions),每个分区可以在不同的服务器上,以实现横向扩展。Kafka的Topic是构建实时流数据处理系统的核心组件之一。通过深入了解Topic的创建、配置、生产者和消费者,以及实际应用中的示例代码,可以更好地理解和应用Kafka。在实际项目中,根据具体需求和场景进行灵活配置,以确保系统的可靠性、性能和安全性。

日常分享数据分析开发、编程语言内容 9527

机器人操作系统ROS(三):话题及其发布订阅

机器人操作系统ROS(三):话题及其发布订阅

博学而笃志,切问而近思。 3103

主题(Topic)与分区(Partition)

在 Kafka 中还有两个特别重要的概念—主题(Topic)与分区(Partition)。Kafka 中的消息以主题为单位进行归类,生产者负责将消息发送到特定的主题(发送到 Kafka 集群中的每一条消息都要指定一个主题),而消费者负责订阅主题并进行消费。 主题是一个逻辑上的概念,它还可以细分为多个分区,一个分区只属于单个主题,很多时候也会把分区称为主题分区(Topic-Partition)。同一主题下的不同分区包含的消息是不同的,分区在存储层面可以看作一个可追加的日志(Log)文件,消息在被追加到分区日

liang只的博客 2154

消息队列两种模式:点对点与发布订阅

1、定义 1.1、点对点:Queue,不可重复消费 1.2、发布/订阅Topic,可以重复消费 2、区别 2.1、点对点模式 2.2、发布订阅模式 3、流行模型比较 3.1、RabbitMQ 3.2、Kafka Java消息服务(Java Message Service,J...

疯一样的女子 1911

基于Python的期权定价蒙特卡洛模拟实现:雪球产品定价算法与源码解析

本资源提供了一套运用蒙特卡洛模拟方法进行期权定价的完整Python实现方案,特别聚焦于雪球型期权产品的数值计算框架构建。该程序设计作为高等院校计算机及相关专业的课程设计项目,经过指导教师专业评审并获得优异评价,在项目考核中取得了接近满分的成绩。该代码库主要面向正在进行课程设计、期末项目开发的计算机专业在校学生,以及需要提升编程实践能力的自学者。实现方案采用随机数生成与概率统计方法,通过大量路径模拟来估算复杂金融衍生品的理论价格。程序架构包含完整的数值计算模块、随机过程生成器和结果分析组件,展现了金融工程与计算科学的交叉应用。这套教学资源不仅提供了基础期权定价模型的实现,还特别针对具有路径依赖特性的雪球期权设计了专用算法。代码结构清晰,注释详尽,适合作为金融计算入门和蒙特卡洛方法学习的实践案例,帮助使用者深入理解随机模拟在金融衍生品定价中的应用原理与实现技术。资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!

上一篇: MVC模型在界面开发中的应用理解
steamer
博客等级 码龄22年 0粉丝 4原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值