Recherche…


Publier-S'abonner en Java

L'éditeur-abonné est un concept familier étant donné l'essor de YouTube, de Facebook et d'autres services de médias sociaux. Le concept de base est qu’un Publisher génère du contenu et un Subscriber qui consomme du contenu. Chaque fois que l' Publisher génère du contenu, chaque Subscriber est averti. Subscribers peuvent théoriquement être abonnés à plusieurs éditeurs.

Il existe généralement un ContentServer situé entre l’éditeur et l’abonné pour faciliter la transmission des messages.

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) {
            ...
        }
    }
}

Habituellement, le modèle de conception de pub-sub est implémenté avec une vue multithreadée. L'une des implémentations les plus courantes considère chaque Subscriber comme un thread distinct, le ContentServer gérant un pool de threads.

Exemple de pub-sub simple en JavaScript

Les éditeurs et les abonnés n'ont pas besoin de se connaître. Ils communiquent simplement à l'aide de files d'attente de messages.

(function () {
        var data;

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

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

Ici, nous avons publié un événement personnalisé nommé myCustomEvent et abonné à cet événement. Ils n'ont donc pas besoin de se connaître.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow