Jaka jest różnica między wzorcami wydawcy-subskrybenta a reaktorem?

11

Wzory publikuj-subskrybuj i Reactor wyglądają bardzo podobnie do mnie. Czym się różnią?

W obu wzorcach wiadomość jest przekazywana do subskrybentów pośrednio (nasłuchujących według wzorca reaktora).

Wydaje mi się, że wzór obserwatora jest bardzo podobny do dwóch innych wzorów.

Jakie są kluczowe różnice między tymi wzorami?

Mohsen
źródło

Odpowiedzi:

12

Jak widzę z linku, wzorzec PubSub nie jest wzorzec OOP, ale wzorzec przesyłania komunikatów , który jest wzorzec architektury sieci.

Wzorzec reaktora jest związany z obsługą żądań serwerów za pomocą jednowątkowej pętli zdarzeń . Ponownie link pokazuje kilka dobrych przykładów, takich jak Node.js, Netty, Twisted itp.

Wreszcie, Observer jest wzorcem projektowym OOP, który opisuje sposób interakcji między obiektami w kodzie OO.

Te trzy wzorce pochodzą z różnych domen.

scriptin
źródło
6

Reactor = jednowątkowa pętla zdarzeń, która odbiera i przetwarza żądania. Te żądania mogą być ładowane partiami z pliku, przez SMTP i / lub HTTP. Przetwarzane jednocześnie odpowiedzi są dostarczane, gdy są gotowe, a nie sekwencyjne.

Wydawcy emitują. Subskrybenci konsumują.

Wydawcy + subskrybenci = Wzorzec obserwatora (Wzory pierwszego projektu). Obserwatorzy strzelają sekwencyjnie i zwykle blokują, dopóki się nie zakończą.

Gerry King
źródło
2

PubSub jest bardziej związany z kolejkami wiadomości (MQ). Ma to związek ze sposobem, w jaki węzły odbierają wiadomości asynchroniczne w systemie rozproszonym.

Wzorzec reaktora ma więcej wspólnego ze zdarzeniami asynchronicznymi. Na przykład gniazda nieblokujące używają wzorca reaktora do dostarczania zdarzeń sieciowych: CZYTAJ, PISAJ, POŁĄCZ, AKCEPTUJ

Możesz sprawdzić CoralReactor, aby lepiej zrozumieć wzór reaktora.

Oświadczenie : Jestem jednym z twórców CoralReactor.

rdalmeida
źródło