수색…


Java로 게시 - 구독

게시자 - 구독자는 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) {
            ...
        }
    }
}

일반적으로 pub-sub 디자인 패턴은 다중 스레드 뷰를 염두에두고 구현됩니다. 더 일반적인 구현 중 하나는 각 Subscriber 를 별도의 스레드로보고 ContentServer 가 스레드 풀을 관리하는 것입니다

JavaScript의 간단한 pub-sub 예제

게시자와 구독자는 서로를 알 필요가 없습니다. 그들은 단순히 메시지 대기열의 도움을 받아 통신합니다.

(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