Comprendre le Pattern PubSub en Développement Logiciel

Exemple pour Pub/Sub
Vidéo non disponible ! Réessayez plus tard
Cette vidéo fait partie de la formation
Apprendre les Design Patterns
Revoir le teaser Je m'abonne
Transcription

69,90€ Je commande

À partir de
27€ /mois
Je m'abonne à Elephorm

Description Programme Avis

69,90€ Je commande

À partir de
27€ /mois
Je m'abonne à Elephorm

Les objectifs de cette vidéo sont :

- Comprendre le fonctionnement du pattern PubSub.
- Apprendre à mettre en place un système de publication-abonnement.
- Explorer les cas d'utilisation et les avantages de ce pattern.
- Découvrir des exemples pratiques d'implémentation.

Le patron PubSub permet un découplage fort entre les émetteurs et les récepteurs d'événements, améliorant ainsi la modularité du code.

Le pattern PubSub est un mélange ingénieux de registres et d'observeurs, visant à optimiser la communication asynchrone dans les applications logicielles. Contrairement au pattern observeur classique, PubSub permet de découpler complètement le code qui déclenche une commande de celui qui l'exécute. Cela signifie que l'émetteur d'un événement n'a pas besoin de savoir si quelqu'un écoute, tandis que le récepteur d'un événement ne sait pas quand l'événement sera déclenché.

Dans notre exemple, nous mettons en place un registre central appelé routeur, qui gère les abonnements et les publications d'événements. Les abonnés s'enregistrent auprès du routeur avec une clé spécifique, généralement une chaîne de caractères, et le routeur appelle les abonnés chaque fois que l'événement correspondant est publié. Ce modèle est très efficace pour des applications distribuées et peuvent être utilisé en combinaison avec des technologies de communication réseau comme Redis ou Crossbar.

En utilisant des bibliothèques comme Event Emitter en JavaScript, il est possible de mettre en œuvre des systèmes de publication-abonnement robustes, utilisés couramment dans des frameworks web comme Ruby Sinatra ou Django en Python. Ce tutoriel inclut également une démonstration pratique utilisant Crossbar pour montrer comment deux pages web peuvent interagir en temps réel via un serveur PubSub distant.

Voir plus
Questions réponses
Quelle est la principale différence entre le pattern PubSub et le pattern observeur ?
La principale différence est que dans le pattern PubSub, l'émetteur et le récepteur d'un événement sont complètement découplés, tandis que dans le pattern observeur, l'observeur est directement lié au sujet qu'il observe.
Quels sont les avantages du pattern PubSub ?
Les avantages du pattern PubSub incluent une meilleure modularité du code, la possibilité de communication asynchrone, et la facilité de mise à l'échelle des applications distribuées.
Comment le pattern PubSub peut-il être utilisé avec un réseau ?
Le pattern PubSub peut être utilisé avec un réseau en ayant un routeur distant auquel différents systèmes peuvent se connecter pour publier ou s'abonner à des événements, facilitant ainsi la communication entre systèmes dispersés géographiquement.
Le pattern PubSub est un mélange de registries et d'observeurs. On a donc des commandes qui sont utilisées, puisqu'on a l'observeur, et on a donc des injections de dépendance qui sont utilisées puisqu'on a le registre. Le but du PubSub est d'aller plus loin qu'observeur, c'est-à-dire qu'on découple complètement les personnes, c'est-à-dire qu'on découpe complètement le code qui va lancer la commande, du code qui va l'exécuter. Ce découplage est tellement fort que le code qui va lancer la commande ne sait même pas s'il y a quelque chose qui va réagir de l'autre côté, et le code qui va exécuter la commande ne sait jamais quand est-ce que cela va arriver. Nous allons créer un exemple extrêmement basique, mais très parlant, de comment cela peut fonctionner. Au début, on va mettre un registre central, qu'on va appeler le routeur. Le routeur va d'abord avoir quelque part un registre de tous les bouts de code qui sont intéressés par les événements que le routeur gère. Ensuite, il va avoir une méthode subscribe. Cette méthode subscribe va prendre une clé, et ensuite, le fameux subscriber, le bout de code qui va être intéressé par les événements qui vont devoir être déclenchés pour la commande. Et ce routeur, quand on appelle la méthode subscribe, il va prendre notre subscriber, et il va le rajouter à la liste des subscribers qui sont intéressés par l'événement lié à cette clé en particulier. Alors, qu'est-ce que cela veut dire, clé ? Clé, d'une manière générale, cela peut être n'importe quoi, mais c'est très souvent une chaîne de caractère. Cette chaîne de caractère peut être sous forme de namespace, mais pas nécessairement, cela peut être une chaîne de caractère qui est juste un simple mot, et c'est ce qu'on va utiliser aujourd'hui pour que ce soit simple. Ensuite, nous allons avoir une méthode publish. Cette méthode publish sera utilisée par les bouts de code qui, eux, vont déclencher les événements. Quand la méthode publish sera appelée, on va prendre tous les subscribers qui sont abonnés à l'événement qui correspond à cette clé, et on va les appeler derrière. Derrière, comment cela s'utilise ? Eh bien, on va instantier notre routeur, et on va créer quelques bouts de code qui sont intéressés par les événements, des simples fonctions qui font des affichages. Et de l'autre côté, on va demander à ces bouts de code de dire que je suis intéressé par ces événements. Par exemple, on va dire que si jamais l'événement fou arrive, je veux qu'on appelle ce subscriber. Et si jamais l'événement fou arrive, je veux qu'on appelle aussi ce subscriber. Si l'événement bar arrive, je veux qu'on appelle ce subscriber. Ça, c'est la clé. Ça, c'est le subscriber. Le subscriber peut être n'importe quoi. Ici, c'est une simple fonction. Dans les patterns plus avancés, ça peut être une classe ou un objet. Et derrière, cette classe ou cet objet peut avoir des méthodes qui vont être appelées au moment où on a du publishing. On peut même imaginer que, quand on fait un subscribe, on appelle le subscriber, on dit « OK, tu as été inscrit à l'événement », « OK, tu as été désinscrit à l'événement », etc. Donc on peut aller beaucoup plus loin dans ce pattern. Ça, c'est vraiment la version la plus « aérée » du pattern. On pourrait faire une version encore plus simple où on n'a même pas un routeur qui est sous forme de classe. On pourrait faire quelque chose de beaucoup plus simple que ça également, mais ça suffit largement. Ici, tant qu'on exécute ça, il ne se passe absolument rien. Il va commencer à se passer des choses le jour où un autre bout de code décide d'appeler la méthode publish. Au moment où le bout de code qui appelle la méthode publish envoie cet événement-là, il décide « OK, moi cet événement, je décide qu'il est arrivé. » Alors cet événement, c'est complètement arbitraire. Vous décidez quand est-ce qu'il est lancé. C'est vous qui décidez ce qu'est un événement. C'est ce bout de code qui décide ce qu'est un événement et comment le propager. Une fois qu'on exécute ça, tous les subscribers qui ont souscrit à l'événement vont être appelés. Par contre, les subscribers qui n'ont pas souscrit à l'événement ne seront pas appelés. Le pubsub, on va l'utiliser un petit peu partout. La technologie Redis permet de faire du pubsub. Vous avez une liste de commandes ici. Et vous allez voir ici que nous avons publibsubscribe avec pubsub ici. Et on peut envoyer sur le serveur des événements et recevoir des événements depuis le serveur. En JavaScript, on a par exemple Event Emitter. Event Emitter, c'est une bibliothèque assez célèbre. Et ce qu'on va faire, on va aller directement créer un routeur, ici qu'on appelle le Event Emitter. Et puis ce qu'on va dire, c'est que je suis intéressé par cet événement, l'événement fou. Et voici la fonction qui est intéressée par ça. Et puis, encore une fois, je vais rajouter à cet événement fou deux nouveaux listeners. Et quand on est prêt à envoyer l'événement, on va faire un petit emitEvent ici. Ça va appeler tous les listeners. On peut se servir de ce genre de choses, par exemple, pour faire du routing. On a exactement ce genre de pattern, par exemple, sur le framework web Ruby Sinatra. A peu près tous les frameworks web, en Python, en Django, en JavaScript également. Mais voilà, en Sinatra, qu'est-ce que vous allez dire ? Vous allez dire que quand un utilisateur arrive sur cette URL, il déclenche ce code. Et derrière, en fait, c'est fait avec un pattern pubsub. C'est-à-dire qu'ici, vous allez avoir un registre de toutes les URLs. Et quand l'événement « un utilisateur est arrivé sur cette URL » se déclenche, et bien derrière, cette fonction est appelée. Le pubsub n'est pas limité en local. On a tendance très souvent à coupler le pubsub avec du réseau. C'est-à-dire qu'on va avoir un bout de code sur une machine qui va dire « je suis intéressé par cet événement », mais il va dire cela en se connectant à un routeur distant. Et ensuite, quelque part ailleurs dans le monde, un autre bout de code va dire au même routeur « voici l'événement qui s'est passé ». Et ce faisant, on permet à des bouts de code qui sont très très loin les uns des autres et qui ne savent pas où ils se trouvent ni qu'est-ce qu'ils font et comment ils sont formatés de pouvoir communiquer. Une technologie qui permet de faire ça, c'est Crossbar. Crossbar, c'est une technologie qui marche avec de nombreux langages. Ça va marcher avec Python, JavaScript, PHP, etc. Et je vais vous donner un exemple de ce que ça peut donner en temps réel. On va prendre mon téléphone. À droite, vous avez la capture de mon téléphone. Et à gauche, je vais partir sur une démonstration d'un serveur Crossbar qui fait office de routeur. Vous voyez qu'ici, j'ai une page web avec une petite vidéo qui peut jouer, qui se joue ici. C'est une vidéo du projet Blender qui est très bien rendue. On peut changer ici le son. On peut ici mettre pause ou relancer. Et ici, j'ai un petit QR code. Eh bien, je vais prendre mon téléphone. Vous pouvez voir les studios au téléphone maintenant ici. Voilà. Bonjour. Et je vais scanner ce QR code ici. Obtenir une URL qui va lancer automatiquement une nouvelle page sur mon téléphone. Là, vous voyez, je suis sur une page qui est complètement différente au niveau de mon téléphone. Et cette page, elle est liée à la page que vous voyez ici. On a une page ici et une page ici. Ces deux pages ne sont même pas sur les mêmes ordinateurs, mais elles sont liées par le pattern PubSub. Ce qui fait que si, avec mon petit doigt, j'appuie sur le bouton Play, vous voyez que la vidéo se relance. Je peux même changer derrière le volume. Et si vous regardez ici, je vais mettre un hover sur ma souris pour que vous puissiez voir, vous allez voir que le volume que je change à droite avec mon doigt sur mon téléphone change automatiquement à gauche. Si je remets pause, voilà, la vidéo se met en pause elle-même. Alors là, je peux fermer la capture de mon téléphone. Cet exemple-là, il fonctionne grâce au pattern PubSub. Regardons un petit peu le code source, le code source de Crossbar et Autobahn. Ici, je vais me connecter au routeur, quelque part par ici. Ici, je demande une connexion au routeur, qui est un routeur distant. Par distant, j'entends qu'il tourne sur ma machine, juste ici. Et ensuite, ici, je décide des événements qui m'intéressent. Vous voyez ici, je m'inscris, je fais une petite enregistrement et je dis voilà, je suis intéressé par l'événement Play, Pause, Volume, Statue, etc. Et inversement, à ce niveau de la page, si je clique ici, j'obtiens la nouvelle page ici, donc je peux regarder le code source, et je peux dire de la même manière. Alors, ici, je suis intéressé par Play, Pause et Volume, mais je suis aussi capable de lancer Play, Pause et Volume. Vous voyez par exemple ici, si je toggle Play, si je clique sur le bouton Play, je vais envoyer l'appel Pause, ou alors l'appel Play. C'est ici que j'appelle la fonction Volume, en cliquant sur un des boutons. Ici, particulièrement, ce bouton de volume, ici, contrôle volume. Si j'ai ce bouton qui est cliqué, je vais lancer derrière ce session.call qui va déclencher l'événement Volume, et qui va arriver au routeur, mais comme c'est un routeur qui est connecté au réseau, il va propager ça à travers toutes les pages de tout mon environnement. Et derrière, c'est cette page qui va recevoir l'événement et qui va donc déclencher le fonctionnement du lecteur vidéo.

Programme détaillé de la formation

Nos dernières formations Code & Data
  • Maîtriser FlutterFlow - De l'Idée à l'Application
    Découvrir
    Cette formation en FlutterFlow est l'outil idéal pour tout développeur souhaitant créer des applications mobiles robustes et interactives sans coder de manière complexe. Grâce à des modules complets et structurés, vous apprendrez à utiliser FlutterFlow et Firebase, à sécuriser vos données, à concevoir des interfaces utilisateur élégantes et à intégrer des API telles qu'OpenIA. Rejoignez-nous pour transformer vos idées en applications innovantes et performantes.
    4h08 57 leçons
  • Webflow - Créer la landing Page d'OpenAI
    Découvrir
    À l'issue de cette formation, les participants seront capables de créer de manière autonome une landing page sophistiquée, similaire à celle d'OpenAI, en utilisant les fonctionnalités avancées de Webflow pour le design responsive et les interactions.
    3h48 19 leçons
  • Apprendre Svelte 3 et SvelteKit 1.0
    Découvrir
    Créez des applications web modernes et ultra-rapides avec notre formation "Apprendre Svelte 3 et SvelteKit 1.0". Rejoignez-nous et devenez un expert du développement JavaScript ! 🚀 #Svelte #SvelteKit #DéveloppementWeb
    7h42 77 leçons
  • Apprendre Vue JS 3
    Découvrir
    Apprenez à créer des applications web modernes avec notre formation "Apprendre Vue JS 3". Rejoignez-nous et maîtrisez ce puissant framework JavaScript ! 🚀 #VueJS #FormationWeb #Développement
    11h47 91 leçons
  • Gratuit
    Apprendre ChatGPT
    Découvrir
    Ce cours vise à fournir une compréhension approfondie de l'intelligence artificielle, en se concentrant sur l'utilisation pratique de ChatGPT et DALL-E. Les participants découvriront comment l'IA peut transformer des domaines variés tels que le marketing, le développement web, et le design graphique. Le contenu couvre les bases de l'IA, l'art de créer des prompts efficaces, l'utilisation de plugins avancés, et le codage assisté par IA. Des projets pratiques permettront d'appliquer ces connaissances dans des scénarios réels. Destiné aux professionnels de la technologie, aux marketeurs, aux développeurs, et à toute personne intéressée par l'IA, ce cours est une opportunité d'acquérir des compétences innovantes et applicables dans divers contextes professionnels et créatifs. Les prérequis incluent une compréhension basique de l'informatique et un intérêt pour l'IA. Le cours promet une aventure d'apprentissage enrichissante, ouvrant de nouvelles perspectives dans l'utilisation de l'intelligence artificielle.
    3h12 30 leçons