Servizio Pub/Sub Javascript

Mar 18 2023
Che cos'è esattamente? Un servizio Pub/Sub è un modello di progettazione che consente di comunicare tra diversi moduli di un'applicazione Web senza dipendere l'uno dall'altro. Consente agli editori di inviare messaggi agli abbonati senza dover sapere nulla su di loro.

Che cos'è esattamente?

Un servizio Pub/Sub è un modello di progettazione che consente di comunicare tra diversi moduli di un'applicazione Web senza dipendere l'uno dall'altro. Consente agli editori di inviare messaggi agli abbonati senza dover sapere nulla su di loro. Gli editori possono pubblicare messaggi su un argomento e gli abbonati possono iscriversi a tale argomento per ricevere messaggi da tali argomenti.

Questo tipo di progettazione è utile soprattutto per la creazione di applicazioni web in tempo reale. Ad esempio, se stiamo creando un'app di chat, possiamo utilizzare un servizio Pub/Sub per inviare messaggi da un utente a un altro in tempo reale. Ciò può essere ottenuto poiché il servizio Pub/Sub consente di gestire gli eventi in modo asincrono.

Come funziona ?

Un servizio Pub/Sub in genere è costituito da tre componenti principali:

  1. Editore : un editore è responsabile dell'invio di messaggi a un argomento. Può trattarsi di qualsiasi parte dell'applicazione che deve inviare messaggi.
  2. Argomento : dove vengono pubblicati i messaggi. Gli abbonati possono iscriversi all'argomento per ricevere messaggi.
  3. Abbonato : un abbonato è responsabile della ricezione dei messaggi da un argomento. Può trattarsi di qualsiasi parte dell'applicazione che deve ricevere messaggi.
  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);
    

Concentriamoci sul metodo di sottoscrizione.

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

Il servizio di pubblicazione

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

Perché dovremmo usarlo?

Accoppiamento libero: uno dei maggiori vantaggi dell'utilizzo del sistema di pubblicazione/sottoscrizione è il disaccoppiamento libero. Come abbiamo già discusso, gli editori non conoscono gli abbonati.

Scalabilità: fornisce un modo per ridimensionare il sistema a un volume enorme. Questo perché il modello può gestire la consegna dei messaggi in modo asincrono, il che significa che non blocca altre parti dell'applicazione.

Buon PubSub ing!!!!