首页
学习
活动
专区
工具
TVP
发布

js发布订阅

发布-订阅模式,看似陌生,其实不然。工作中经常会用到,例如 Node.js EventEmitter 中的 on 和 emit 方法;Vue 中的 on 和 emit 方法。...订阅者(Subscriber)把自己想订阅事件注册(Subscribe)到调度中心(Event Channel),当发布者(Publisher)发布事件(Publish Event)到调度中心,也就是该事件触发时...上面一个看似简单的操作,其实是一个典型的发布订阅模式,公众号属于发布者,用户属于订阅者;用户将订阅公众号的事件注册到调度中心,公众号作为发布者,当有新文章发布时,公众号发布事件到调度中心,调度中心会及时发消息告知用户...,根据 event 值去执行对应缓存列表中的函数(发布发布事件到调度中心,调度中心处理代码) off 方法可以根据 event 值取消订阅(取消订阅) once 方法只监听一次,调用完毕后删除缓存函数...**发布订阅模式**:订阅者(Subscriber)把自己想订阅事件注册(Subscribe)到调度中心(Event Channel),当发布者(Publisher)发布事件(Publish Event

1.4K20
您找到你想要的搜索结果了吗?
是的
没有找到

js实现发布订阅模式

// 几个要素: // 1.维护一个 events 对象 // 2.对象上每个事件为 key,值为事件执行函数,为数组 // 3.维护三个方法: // 触发事件:emit,执行事件所绑定的方法(on绑定的...) // 监听事件:on,哪里需要在监听到事件的时候执行一些动作,就在那里绑定,可能有多个待执行函数,数组,每次监听到事件的时候统一 push 到事件数组中,由emit统一执行 // 仅监听一次事件:once...,先执行 on 事件,监听到后执行 callback,callback 中再将该事件解绑,直接执行一次 callback(这里依然是由emit触发的时候执行) // once是多个地方监听,第一次发送的事件都会打印...,第二次发送的事件则都不会打印 // 解绑事件:off,将事件对象中维护的事件执行函数的数组进行过滤,删掉要解绑的事件方法 class Events { constructor() {...const callback = (...args) => { // 当一次 emit 执行事件的时候,进行解绑事件操作 const listeners

43440

超精简的订阅发布事件组件--SPEvent

概述本文主要描述一个超精简的订阅发布事件组件--SPEvent。在实际开发过程中,一个事件的产生会产生很多业务的执行,或者多个事件都要执行同一个业务的执行。...第二种策略的方式,实际在软件架构中经常看到,比如MQTT的通信(通过订阅对应的topic去监听对应内容)。有了上述的需求,作者做了一个超精简的订阅发布事件组件。整个逻辑很简单。...整个订阅发布事件机制围绕着EventHub和EventNode,特点:资源占用极小,接口操作简单事件支持动态订阅,动态注销。...SPEvent采用双向链表进行维护整个订阅-发布逻辑SPEvent一定存在一个EventHubList链表来维护事件类型,它默认是没有任何EventHub节点,订阅事件流程:当订阅订阅事件之后,如果事件不存在...,事件订阅事件发布

36220

基于发布-订阅的原生 JS 插件封装

四、采用发布-订阅 估计读完这段代码,你也体会到了这个功能的实现是非常容易实现的。但是实际上,作为一个插件的标准来讲,这段代码是存在一些潜在的问题的,这些问题并不是逻辑上的问题,而是设计问题。...我们的具体做法就是采用发布-订阅模式。 发布订阅模式又叫观察者模式,它定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。...拿刚刚实现的功能来说,在对象创建的时候,我就开辟一个池子,将需要执行的方法放进这个池子,当鼠标按下的时候,我把池子里面的函数拿过来依次执行,对于鼠标松开就再创建一个池子,同理,这就是发布-订阅。...jQuery 里面有现成的发布订阅方法。...有了发布-订阅的场景,理解这个设计思想就更加容易了。其实你看在这个过程中,功能并没有添加多少,但是这波操作确实值得,因为它让整个代码更加的灵活。

3K20

【EventBus】事件通信框架 ( 订阅类-订阅方法缓存集合 | 事件类型-订阅者集合 | 订阅对象-事件类型集合 )

文章目录 前言 一、订阅类-订阅方法缓存集合 二、事件类型-订阅者集合 三、订阅对象-事件类型集合 前言 首先声明几个数据结构 , 参考 【EventBus】EventBus 源码解析 ( 注册订阅者总结...>, List> METHOD_CACHE = new HashMap(); 二、事件类型-订阅者集合 ---- 事件类型-订阅者集合 : Map, CopyOnWriteArrayList> subscriptionsByEventType; 三、订阅对象-事件类型集合 ---- 订阅对象-事件类型集合 : Map...>>> typesBySubscriber ; Key - 订阅者对象 ; Value - 订阅者对象中所有的订阅方法的事件参数类型集合 ; 在注册时 , 设置该对象对应的订阅方法接收的事件类型 , 在取消注册时..., 可以根据该订阅者对象 , 查找所有订阅方法的事件参数类型 , 然后再到 METHOD_CACHE 中 , 根据事件参数类型 , 查找对应的 MySubscription 集合 , 从而找到 MySubscription

85020

Vue之全局事件总线和消息订阅发布

它一出生就被利用了) 当然不是谁都能但此大任的,x 需要具备两个条件: 所有组件都可以看到 x 身上有 on、on 、on、off 、$emit 方法 统一给 x 命名为 $bus 我们将其定义在 main.js...消息订阅发布(适用于任意组件间通信) 原理: 简单理解: 需要数据的组件:订阅消息 提供数据的组件:发布消息 这个相比第一种方法就要麻烦那么一丢丢了,它需要安装 pubsub,我们打开 VScode...的控制台,输入 npm i pubsub-js,进行安装 在传数据和接收数据的组件中都要通过 import pubsub from 'pubsub-js' 引入这个文件 然后就可以开始使用了 接收数据...:A 组件想接收数据,则在 A 组件中订阅消息,订阅的回调留在 A 组件自身 this.pubId = pubsub.subscribe('hello',(msgName,data)=>{ console.log...,也要将其删除,不能占用空间,但是删除订阅消息不是用 $off ,而是 publish.unsubscribe(this.pubId),其中 this.pubId 是每个消息创建的时候都会有一个 id,

72140

发布订阅模式:使用 Go 实现简单的事件总线

事件总线是发布/订阅模式[1]的实现,其中发布发布数据,并且感兴趣的订阅者可以监听这些数据并基于这些数据作出处理。这使发布者与订阅者松耦合。...发布者将数据事件发布事件总线,总线负责将它们发送给订阅者。 传统的实现事件总线的方法会涉及到使用回调。订阅者通常实现接口,然后事件总线通过接口传播数据。...在本文中,我们将重点介绍如何使用 channel 来实现事件总线。 我们专注于基于主题(topic)的事件发布发布到主题,订阅者可以收听它们。...订阅主题 对于订阅主题,使用 channel。它就像传统方法中的回调一样。当发布者向主题发布数据时,channel将接收数据。...发布主题 要发布事件发布者需要提供广播给订阅者所需要的主题和数据。

5.4K40

Redis 发布订阅

简介Redis的发布订阅(Pub/Sub)功能允许客户端订阅一个或多个频道,当某个频道有消息发布时,订阅该频道的客户端会收到相应的消息。...发布订阅模式在实际应用中被广泛应用,比如在聊天室、实时数据推送、通知等场景下都可以使用发布订阅模式实现。...发布订阅模式的基本概念在Redis中,发布订阅模式涉及到以下几个基本概念:发布者(Publisher):发布消息的客户端频道(Channel):一种消息分类的方式,发布者可以将消息发布到一个或多个频道中订阅者...(Subscriber):订阅频道的客户端消息(Message):发布发布到频道中的消息发布订阅模式的实现Redis的发布订阅模式通过以下命令实现:SUBSCRIBE channel [channel...:取消订阅一个或多个频道PUBLISH channel message:将消息发布到指定的频道中,所有订阅该频道的客户端都会收到该消息发布订阅模式的示例下面是一个简单的发布订阅模式的示例:import

76820

【Redis】Redis 发布订阅通信模式 ( 发布订阅模式 | 订阅频道 | 发布消息 | 接收消息 )

文章目录 一、发布订阅模式 二、订阅频道 三、发布消息 四、接收消息 一、发布订阅模式 ---- Redis 中 存在一种 发布订阅 消息通信模式 : 消息发布者 : 负责发送消息 , 订阅者需要订阅发布者频道...; 消息订阅者 : 负责接收消息 ; 订阅者 先 订阅 发布者频道 , 当 发布发布消息时 , 订阅者 会接收到该信息 ; 在 Redis 中 , 发布者 是 消息频道 , 订阅者 是 Redis...客户端 ; 一个 Redis 客户端可以 订阅多个 消息频道 ; 一个 消息频道 可以 被多个 Redis 客户端 订阅 ; 当 消息频道 发送消息后 , 订阅该频道的 客户端 , 就会收到该频道发送的消息...; 二、订阅频道 ---- 订阅频道 : 在一个命令行中 , 执行 subscribe channel1 命令 , 可以 订阅 名称为 channel1 的 消息频道 ; 上述命令执行后 , 在命令行中会...(press Ctrl-C to quit) 1) "subscribe" 2) "channel1" 3) (integer) 1 三、发布消息 ---- 重新打开一个 CMD 命令行工具 , 执行

1.5K20

Spring Cloud Bus中的事件订阅发布(一)

Spring Cloud Bus Spring Cloud Bus是在Spring Cloud Stream的基础上进行的封装,对于指定主题的消息的发布订阅是通过Spring Cloud Stream...根据上一节的基础应用,我们总结出Spring Cloud Bus的主要功能如下两点: 对指定主题springCloudBus的消息订阅发布。...事件监听,包括刷新事件、环境变更事件、远端应用的ack事件以及本地服务端发送事件等。 下面我们以这两方面作为主线,进行Spring Cloud Bus的源码分析。本文主要针对事件订阅发布。...事件订阅发布 事件驱动模型 这部分需要读者首先了解下Spring的事件驱动模型。我们在这边简单介绍下设计的主要概念,帮助大家易于理解后面的内容。...事件监听器以及消息的订阅发布待后续更新。。 参考 Spring Cloud Bus-v1.3.3

1.7K100

Spring Cloud Bus中的事件订阅发布(二)

在之前的文章Spring Cloud Bus中的事件订阅发布(一)介绍了消息总线的相关事件。 本文主要介绍消息总线的事件监听器以及消息的订阅发布。...,我们将在下一节结合消息的订阅发布一起讲解。...消息的订阅发布 Spring Cloud Bus基于Spring Cloud Stream,对特定主题的消息进行订阅发布事件以消息的形式传递到其他服务实例。...如果是确认类事件,当开启了事件追踪且事件不是来自于自身,则发布事件,对于确认类事件,处理已经完成; 如果自身需要处理该事件且该事件不是来自自身,则发布事件。...总结 本文在上一篇介绍Spring Cloud Bus中的事件基础上,结合源码继续介绍事件的监听器以及事件订阅发布是如何在消息总线中实现的。 消息总线常用于传播状态的变更和管理指令的发布

62940

Spring Cloud Bus中的事件订阅发布(二)

在之前的文章Spring Cloud Bus中的事件订阅发布(一)介绍了消息总线的相关事件。本文主要介绍消息总线的事件监听器以及消息的订阅发布。...,我们将在下一节结合消息的订阅发布一起讲解。...消息的订阅发布 Spring Cloud Bus基于Spring Cloud Stream,对特定主题的消息进行订阅发布事件以消息的形式传递到其他服务实例。...如果是确认类事件,当开启了事件追踪且事件不是来自于自身,则发布事件,对于确认类事件,处理已经完成; 如果自身需要处理该事件且该事件不是来自自身,则发布事件。...总结 本文在上一篇介绍Spring Cloud Bus中的事件基础上,结合源码继续介绍事件的监听器以及事件订阅发布是如何在消息总线中实现的。 消息总线常用于传播状态的变更和管理指令的发布

1.7K70

Redis发布订阅

Redis发布订阅 什么是发布订阅 所谓发布订阅,就是 消息发布发布消息 及 消息订阅者接收消息 ,二者通过某种媒介关联起来。...发布订阅解析 Redis发布订阅(pub/sub)是一种 消息通信模式 :发送者(pub)发送消息,订阅者(sub)接收消息。 Redis客户端可以订阅任意数量的频道。...频道) 作为两者的中介—— 发布者将信息直接发布给 channel ,而 channel 负责将信息发送给适当的订阅者,发布者和订阅者之间没有相互关系,也不知道对方的存在 频道 channel1 ,以及订阅这个频道的三个客户端...发布订阅命令 下表列出了 redis 发布订阅常用命令: 测试 订阅端:进行订阅 发送端:发送信息 查看是否收到 订阅端 127.0.0.1:6379> SUBSCRIBE MoYu #订阅...Pub/Sub从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息

69030

发布订阅模式

概述 发布订阅模式又叫观察者模式,它定义了对象间的一种一对多的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,所有依赖于它的对象都将得到通知。...其中包含三个对象:发布者,订阅者,发布中心,接下来就进行代码的编写 代码编写 发布者与订阅者 其中id就是发布者与订阅者的唯一标识 //发布者 class Publisher{ private...); //发送消息 public void sendMessage(Publisher publisher,Message message); } //具体的发布订阅中心 class...["+publisherId+"] 给订阅者 ["+subId+"] 发布了消息 ["+message.getContent()+"]"); } } 代码测试 //两个发布者...Subscripter s1 = new Subscripter(1); Subscripter s2 = new Subscripter(2); //发布订阅中心

15130
领券