บริการ Javascript Pub/Sub

Mar 18 2023
มันคืออะไรกันแน่? บริการ Pub/Sub คือรูปแบบการออกแบบที่ช่วยให้สามารถสื่อสารระหว่างโมดูลต่างๆ ของเว็บแอปพลิเคชันโดยไม่ต้องพึ่งพาซึ่งกันและกัน ช่วยให้ผู้เผยแพร่สามารถส่งข้อความถึงสมาชิกโดยไม่ต้องรู้อะไรเกี่ยวกับพวกเขา

มันคืออะไรกันแน่?

บริการ Pub/Sub คือรูปแบบการออกแบบที่ช่วยให้สามารถสื่อสารระหว่างโมดูลต่างๆ ของเว็บแอปพลิเคชันโดยไม่ต้องพึ่งพาซึ่งกันและกัน ช่วยให้ผู้เผยแพร่สามารถส่งข้อความถึงสมาชิกโดยไม่ต้องรู้อะไรเกี่ยวกับพวกเขา ผู้เผยแพร่สามารถเผยแพร่ข้อความไปยังหัวข้อ และผู้สมัครสมาชิกสามารถสมัครรับข้อมูลในหัวข้อนั้นเพื่อรับข้อความจากหัวข้อเหล่านั้น

การออกแบบประเภทนี้มีประโยชน์อย่างมากสำหรับการสร้างเว็บแอปพลิเคชันแบบเรียลไทม์ ตัวอย่างเช่น หากเรากำลังสร้างแอปแชท เราสามารถใช้บริการ Pub/Sub เพื่อส่งข้อความจากผู้ใช้คนหนึ่งไปยังอีกคนหนึ่งแบบเรียลไทม์ สิ่งนี้สามารถทำได้เนื่องจากบริการ Pub/Sub อนุญาตให้จัดการเหตุการณ์แบบอะซิงโครนัส

มันทำงานอย่างไร ?

โดยทั่วไปแล้วบริการ Pub/Sub จะประกอบด้วยองค์ประกอบหลักสามส่วน:

  1. Publisher : ผู้เผยแพร่มีหน้าที่ส่งข้อความไปยังหัวข้อต่างๆ นี่อาจเป็นส่วนใดก็ได้ของแอปพลิเคชันที่ต้องการส่งข้อความ
  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!!!!