Quelle est la différence entre l'éditeur-abonné et les modèles de réacteurs?

11

Publiez-abonnez-vous et les modèles de réacteurs me ressemblent beaucoup. En quoi sont-ils différents?

Dans les deux modèles, un message est transmis indirectement aux abonnés (auditeurs dans le modèle de réacteur).

Je pense que le modèle d'observateur est également très similaire à deux autres modèles.

Quelles sont les principales différences entre ces modèles?

Mohsen
la source

Réponses:

12

Comme je peux le voir sur le lien, le modèle PubSub n'est pas un modèle OOP, mais plutôt un modèle de messagerie , qui est un modèle architectural de réseau.

Le modèle de réacteur est lié à la gestion des demandes des serveurs avec une boucle d'événements à un seul thread . Encore une fois, le lien montre de bons exemples comme Node.js, Netty, Twisted, etc.

Enfin, Observer est un modèle de conception OOP qui décrit un moyen d'interaction entre les objets dans le code OO.

Ces trois modèles proviennent donc de domaines différents.

scriptin
la source
6

Reactor = boucle d'événement à thread unique qui reçoit et traite les demandes. Ces demandes pourraient être chargées par lots à partir d'un fichier, via SMTP et / ou HTTP. Les réponses traitées simultanément sont fournies lorsqu'elles sont prêtes plutôt que séquentiellement.

Les éditeurs émettent. Les abonnés consomment.

Éditeurs + abonnés = modèle d'observateur (Heads First Design Patterns). Les observateurs tirent séquentiellement et bloquent généralement jusqu'à ce qu'ils terminent.

Gerry King
la source
2

PubSub est davantage lié aux files d'attente de messagerie (MQ). Cela concerne la façon dont les nœuds reçoivent les messages asynchrones dans un système distribué.

Le modèle de réacteur a plus à voir avec les événements asynchrones. Par exemple, les sockets non bloquantes utilisent le modèle de réacteur pour fournir des événements de réseau: LIRE, ÉCRIRE, CONNECTER, ACCEPTER

Vous pouvez vérifier CoralReactor pour avoir une meilleure compréhension du modèle de réacteur.

Avertissement : je suis l'un des développeurs de CoralReactor.

rdalmeida
la source