Служба публикации/подписки Javascript

Mar 18 2023
Что именно? Служба Pub/Sub — это шаблон проектирования, который позволяет взаимодействовать между различными модулями веб-приложения независимо друг от друга. Это позволяет издателям отправлять сообщения подписчикам, ничего о них не зная.

Что именно?

Служба Pub/Sub — это шаблон проектирования, который позволяет взаимодействовать между различными модулями веб-приложения независимо друг от друга. Это позволяет издателям отправлять сообщения подписчикам, ничего о них не зная. Издатели могут публиковать сообщения в теме, а подписчики могут подписываться на эту тему, чтобы получать сообщения из этих тем.

Этот тип дизайна в основном полезен для создания веб-приложений в реальном времени. Например, если мы создаем приложение для чата, мы можем использовать службу Pub/Sub для отправки сообщений от одного пользователя другому в режиме реального времени. Этого можно достичь, поскольку служба Pub/Sub позволяет обрабатывать события асинхронно.

Как это работает ?

Служба Pub/Sub обычно состоит из трех основных компонентов:

  1. Издатель : издатель отвечает за отправку сообщений в темы. Это может быть любая часть приложения, которой необходимо отправлять сообщения.
  2. Тема : Здесь публикуются сообщения. Подписчики могут подписаться на тему, чтобы получать сообщения.
  3. Подписчик : Подписчик отвечает за получение сообщений из темы. Это может быть любая часть приложения, которому необходимо получать сообщения.
  4. const subscribers = {};
    
    function publish(topic, message) {
      if (!Array.isArray(subscribers[topic])) {
        return;
      }
      subscribers[topic].forEach(
        (callback) => callback(message)
      );
    }
    
    function subscribe(topic, callback) {
      if (!Array.isArray(subscribers[topic])) {
        subscribers[topic] = [];
      }
      const index = subscribers[topic].push(callback) - 1;
      return {
        unsubscribe() {
          subscribers[topic].splice(index, 1);
        }
      }
    }
    
    export { publish, subscribe };
    
    
    // Example usage
    
    // Subscribing to a new topic
    const subscription = pubSub.subscribe("event", data => {
      console.log(`"event", was published with this data: ${data.msg}`);
    })
    
    // unsubscribing
    subscription.unsubscribe();
    
    // Publishing a message
     const message = {
       msg: "Publishing a new topic"
     };
     pubSub.publish("event", message);
    

Давайте сосредоточимся на методе подписки.

function subscribe(topic, callback) {
  if (!Array.isArray(subscribers[topic])) {
    subscribers[topic] = [];
  }
  const index = subscribers[topic].push(callback) - 1;
  return {
    unsubscribe() {
      subscribers[topic].splice(index, 1);
    }
  }
}

Служба публикации

function publish(topic, message) {
  if (!Array.isArray(subscribers[topic])) {
    return;
  }
  subscribers[topic].forEach(
    (callback) => callback(message)
  );
}

Почему мы должны его использовать?

Слабая связь. Одним из самых больших преимуществ использования системы публикации/подписки является слабая развязка. Как мы уже говорили, издатели не знают о подписчиках.

Масштабируемость: обеспечивает возможность масштабирования системы до огромных объемов. Это связано с тем, что шаблон может обрабатывать доставку сообщений асинхронно, что означает, что он не блокирует другие части приложения.

Счастливый PubSub!!!!