자바스크립트 Pub/Sub 서비스

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 ing!!!!