В чем разница между схемами издатель-подписчик и реактор?

11

Шаблоны публикации-подписки и Reactor выглядят очень похоже на меня. Чем они отличаются?

В обоих шаблонах сообщение передается подписчикам косвенно (слушатели в схеме реактора).

Я чувствую, что паттерн наблюдателя очень похож на два других паттерна.

Каковы основные различия между этими образцами?

Мохсен
источник

Ответы:

12

Как видно из ссылки, шаблон PubSub - это не шаблон ООП, а шаблон обмена сообщениями , который является шаблоном сетевой архитектуры.

Шаблон Reactor связан с обработкой запросов серверов с помощью однопоточного цикла обработки событий . Опять же, ссылка показывает несколько хороших примеров, таких как Node.js, Netty, Twisted и т. Д.

Наконец, Observer - это OOP design-pattern, который описывает способ взаимодействия между объектами в OO-коде.

Таким образом, эти три модели из разных доменов.

scriptin
источник
6

Reactor = однопоточный цикл обработки событий, который получает и обрабатывает запросы. Эти запросы могут быть загружены пакетами из файла через SMTP и / или HTTP. Обработанные одновременно ответы доставляются по мере готовности, а не последовательно.

Издатели издают. Подписчики потребляют.

Издатели + подписчики = Шаблон наблюдателя (Шаблоны первого дизайна Heads). Наблюдатели стреляют последовательно и обычно блокируют, пока не завершат.

Джерри Кинг
источник
2

PubSub больше связан с очередями сообщений (MQ). Это связано с тем, как узлы получают асинхронные сообщения в распределенной системе.

Шаблон реактора больше связан с асинхронными событиями. Например, неблокирующие сокеты используют схему реактора для доставки сетевых событий: READ, WRITE, CONNECT, ACCEPT

Вы можете проверить CoralReactor, чтобы лучше понять схему реактора.

Отказ от ответственности : я один из разработчиков CoralReactor.

rdalmeida
источник