• 10 hours
  • Easy

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 4/10/19

Rendez vos lutins protocolaires

Log in or subscribe for free to enjoy all this course has to offer!

Dans la partie précédente, vous avez créé un mini-réseau et routé un paquet à travers ce réseau. Mais plaçons-nous ici à la place du serveur (soit : Bobby). Lui ne sait pas si son paquet est bien arrivé à destination ou non. Dans ce chapitre, nous allons donc l'aider à… recevoir un accusé de réception.

Mettez-vous à la place de l'émetteur

En appuyant sur la touche “espace”, Bobby envoie un paquet de gâteaux. Mais il n’a aucune visibilité sur ce qui se passe ensuite ! Et on ne sait jamais ce qui peut arriver : un gentleman trop gourmand sur la route du paquet, un bretzel-routeur défaillant… Bref, on n’est pas à l’abri de perdre un paquet !

Il est donc nécessaire que Bobby sache si le paquet est bien arrivé ou non, car si ce n’est pas le cas, il faudra qu’il renvoie le paquet de nouveau.

Lorsqu’on appuie sur la touche “espace”, Bobby envoie un paquet vers Ada. Ici, on se fiche de savoir par où passe le paquet. On sait juste qu’il part de Bobby, et qu’il arrive à Ada.

Mais comme je le disais, on n’est jamais à l’abri d’une perte de paquet.

Dans le projet, le paquet arrive toujours à destination. Et pour cause : lorsqu’on appuie sur la touche “espace”, le paquet crée une copie de lui-même qui va directement vers Ada.

Si je souhaite simuler une perte aléatoire, je peux donc par exemple ajouter un script qui va “entrer en concurrence” avec le précédent, comme ceci :

Mon programme exécutera donc les deux scripts : dans le premier cas, le paquet arrive jusqu’à Ada, et dans le second, il est supprimé aléatoirement après 0.3 seconde, c’est-à-dire moins de temps que nécessaire pour arriver à Ada. Autrement dit, il sera supprimé sur le chemin.

Faites envoyer un accusé de réception par votre destinataire

Maintenant qu’on a un réseau presque réaliste avec pertes de paquets, revenons à notre problème initial : Bobby doit savoir si Ada a bien reçu le paquet.

Eh oui, il va falloir ajouter un nouveau lutin, similaire au paquet de Bobby, mais qui sera cette fois envoyé par Ada uniquement si elle reçoit le paquet de Bobby (c’est-à-dire si elle est touchée par le paquet…). Et lorsque Bobby reçoit l’accusé de réception, il peut, par exemple, dire dans une bulle qu’il l’a bien reçu.

Vous avez fini de coder ce nouveau lutin-accusé de réception ? Dans ce cas vous devriez avoir quelque chose qui ressemble à ça :

Mais, là encore, on n’est pas à l’abri d’une perte de l’accusé de réception sur le réseau… Libre à vous d’ajouter ou non un petit script pour simuler cette perte aléatoire.

Enrichissez vos protocoles

Voilà, vous venez de définir des règles simples et minimales de communication entre Bobby et Ada (ou entre votre serveur et votre client) : en somme, vous avez mis en place un protocole minimal de communication. Vous venez de modéliser la transmission et de créer un simulateur. Je vous encourage fortement à l’enrichir en définissant d’autres actions.

Pour le moment, Bobby sait quand il reçoit l’accusé de réception ou non. Mais s’il envoie un paquet, et qu’il ne reçoit jamais d’accusé de réception, que l’accusé s’est perdu ou bien que le paquet initial lui-même s’est perdu, comment va-t-il savoir quand envoyer à nouveau le paquet ?

Grâce à un chronomètre !

Quoi, un chronomètre ? Oui, il y a ça dans Scratch, dans la catégorie “Capteurs”. D’ailleurs, vous pouvez le tester avec les blocs suivants :

Je vous laisse donc tester ces quelques blocs si vous souhaitez améliorer votre protocole ; vous pouvez également ajouter des variables qui gardent en mémoire le nombre de paquets envoyés, et le nombre d’accusés de réception reçus… Facile, pour vous qui avez suivi le module 1 de Class’Code ! ;)

En résumé

  • Sur les réseaux, il peut y avoir des pertes de paquets !

  • Un protocole de communication, ce sont des règles établies pour que des machines puissent communiquer entre elles sans ambiguïté.

  • Ces machines échangent des messages sous des formats particuliers, et les actions effectuées à la réception de ces messages sont spécifiques et définies pour chacun des messages.

Example of certificate of achievement
Example of certificate of achievement