खोज…


जावा में प्रकाशित-सदस्यता लें

प्रकाशक-ग्राहक YouTube, Facebook और अन्य सोशल मीडिया सेवाओं के उदय को देखते हुए एक परिचित अवधारणा है। मूल अवधारणा यह है कि एक Publisher जो सामग्री उत्पन्न करता है और एक Subscriber जो सामग्री का उपभोग करता है। जब भी Publisher सामग्री उत्पन्न करता है, प्रत्येक Subscriber को सूचित किया जाता है। Subscribers सैद्धांतिक रूप से एक से अधिक प्रकाशकों की Subscribers सकते हैं।

आमतौर पर एक ContentServer होता है जो मैसेजिंग में मदद करने के लिए प्रकाशक और ग्राहक के बीच बैठता है

public class Publisher {
    ...
    public Publisher(Topic t) {
        this.topic = t;
    }

    public void publish(Message m) {
        ContentServer.getInstance().sendMessage(this.topic, m);
    }
}

public class ContentServer {
    private Hashtable<Topic, List<Subscriber>> subscriberLists;

    private static ContentServer serverInstance;

    public static ContentServer getInstance() {
        if (serverInstance == null) {
            serverInstance = new ContentServer();
        }
        return serverInstance;
    }

    private ContentServer() {
        this.subscriberLists = new Hashtable<>();
    }
    
    public sendMessage(Topic t, Message m) {
        List<Subscriber> subs = subscriberLists.get(t);
        for (Subscriber s : subs) {
            s.receivedMessage(t, m);
        }
    }

    public void registerSubscriber(Subscriber s, Topic t) {
        subscriberLists.get(t).add(s);
    }

public class Subscriber {
    public Subscriber(Topic...topics) {
        for (Topic t : topics) {
            ContentServer.getInstance().registerSubscriber(this, t);
        }
    }
    
    public void receivedMessage(Topic t, Message m) {
        switch(t) {
            ...
        }
    }
}

आमतौर पर, पब-उप डिज़ाइन पैटर्न को एक मल्टीथ्रेडेड दृश्य को ध्यान में रखते हुए लागू किया जाता है। अधिक सामान्य कार्यान्वयन में से एक प्रत्येक Subscriber को एक अलग थ्रेड के रूप में देखता है, जिसमें ContentServer एक थ्रेड पूल का प्रबंधन करता है

जावास्क्रिप्ट में सरल पब-उप उदाहरण

प्रकाशकों और ग्राहकों को एक दूसरे को जानने की जरूरत नहीं है। वे बस संदेश कतारों की मदद से संवाद करते हैं।

(function () {
        var data;

        setTimeout(function () {
            data = 10;
            $(document).trigger("myCustomEvent");
        }, 2000);

        $(document).on("myCustomEvent", function () {
            console.log(data);
        });
})();

यहां हमने myCustomEvent नामक एक कस्टम ईवेंट प्रकाशित किया और उस ईवेंट पर सब्सक्राइब किया। इसलिए उन्हें एक दूसरे को जानने की जरूरत नहीं है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow