Javascript Pub/Sub サービス

Mar 18 2023
正確には何ですか? Pub/Sub サービスは、Web アプリケーションの異なるモジュール間で相互に依存せずに通信できるようにする設計パターンです。これにより、パブリッシャーは購読者について何も知らなくても、購読者にメッセージを送信できます。

正確には何ですか?

Pub/Sub サービスは、Web アプリケーションの異なるモジュール間で相互に依存せずに通信できるようにする設計パターンです。これにより、パブリッシャーは購読者について何も知らなくても、購読者にメッセージを送信できます。パブリッシャーはメッセージをトピックにパブリッシュでき、サブスクライバーはそのトピックをサブスクライブして、それらのトピックからメッセージを受信できます。

この種の設計は、リアルタイム Web アプリケーションを構築する場合に主に役立ちます。たとえば、チャット アプリを構築している場合、Pub/Sub サービスを使用して、あるユーザーから別のユーザーにリアルタイムでメッセージを送信できます。これは、Pub/Sub サービスでイベントを非同期に処理できるため実現できます。

どのように機能するのでしょうか?

Pub/Sub サービスは通常、次の 3 つの主要コンポーネントで構成されます。

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

なぜそれを使用する必要があるのでしょうか?

疎結合:パブリッシュ/サブスクライブ システムを使用する最大の利点の 1 つは、疎結合です。すでに説明したように、パブリッシャーは購読者のことを知りません。

スケーラビリティ:システムを大規模なボリュームに拡張する方法を提供します。これは、パターンがメッセージの配信を非同期に処理できるためであり、アプリケーションの他の部分をブロックしないことを意味します。

PubSub おめでとうございます!!!!