Servicio de publicación/suscripción de Javascript

Mar 18 2023
¿Qué es exactamente? Un servicio Pub/Sub es un patrón de diseño que permite la comunicación entre diferentes módulos de una aplicación web sin depender unos de otros. Permite a los editores enviar mensajes a los suscriptores sin tener que saber nada sobre ellos.

¿Qué es exactamente?

Un servicio Pub/Sub es un patrón de diseño que permite la comunicación entre diferentes módulos de una aplicación web sin depender unos de otros. Permite a los editores enviar mensajes a los suscriptores sin tener que saber nada sobre ellos. Los editores pueden publicar mensajes en un tema y los suscriptores pueden suscribirse a ese tema para recibir mensajes de esos temas.

Este tipo de diseño es principalmente útil para crear aplicaciones web en tiempo real. Por ejemplo, si estamos creando una aplicación de chat, podemos usar un servicio Pub/Sub para enviar mensajes de un usuario a otro en tiempo real. Esto se puede lograr ya que el servicio Pub/Sub permite manejar eventos de forma asíncrona.

Como funciona ?

Un servicio Pub/Sub normalmente consta de tres componentes principales:

  1. Editor : un editor es responsable de enviar mensajes a un tema. Puede ser cualquier parte de la aplicación que necesite enviar mensajes.
  2. Tema : Es donde se publican los mensajes. Los suscriptores pueden suscribirse al tema para recibir mensajes.
  3. Suscriptor : Un suscriptor es responsable de recibir mensajes de un tema. Puede ser cualquier parte de la aplicación que necesite recibir mensajes.
  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);
    

Centrémonos en el método de suscripción.

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);
    }
  }
}

El servicio de publicación

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

¿Por qué deberíamos usarlo?

Acoplamiento flexible: una de las mayores ventajas de utilizar el sistema de publicación/suscripción es el desacoplamiento flexible. Como ya comentamos, los editores no conocen a los suscriptores.

Escalabilidad: proporciona una forma de escalar el sistema a un gran volumen. Esto se debe a que el patrón puede gestionar la entrega de mensajes de forma asíncrona, lo que significa que no bloquea otras partes de la aplicación.

¡Feliz publicación de PubSub!