Skip to content

发布订阅

上次更新 2024年10月12日星期六 7:59:25 字数 252 字 时长 1 分钟

概念

在软件架构中,发布订阅是一种消息范式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者)。而是将发布的消息分为不同的类别,无需了解哪些订阅者(如果有的话)可能存在。同样的,订阅者可以表达对一个或多个类别的兴趣,只接收感兴趣的消息,无需了解哪些发布者(如果有的话)存在。【1】汪锦岭. 面向 Internet 的发布/订阅系统的关键技术研究[D]. 中国科学院研究生院(软件研究所), 2005.

EventBus实现

发布订阅.js
js
class EventBus {
  events = {};
  on(eventName, cb) {
    (events[eventName] ??= new Set()).add(cb);
  }
  emit(eventName, ...arg) {
    events[eventName]?.forEach((_) => cb(...arg));
  }
  off(eventName, cb) {
    events[eventName]?.delete(cb);
  }
  once(eventName, cb) {
    const handler = (...args) => {
      cb(...args);
      this.off(eventName, handler);
    };
    this.on(eventName, handler);
  }
}
const bus = new EventBus();