Précédent Index Suivant

Exercices

Les exercices proposés permettent de mettre en oeuvre différents types d'applications distribuées. Le premier offre un nouveau service réseau permettant une mise à l'heure des machines clientes. Le deuxième est une adaptation du jeu <<Ver de Terre>> pour être joué à plusieurs sur le réseau. le troisième exercice montre comment on peut utiliser les ressources de différentes machines pour distribuer un calcul.

Service : horloge

Cet exercice consiste à implanter un service <<horloge>> qui donne l'heure à tout client qui le désire. L'idée est d'avoir ainsi une machine de référence pour mettre à l'heur les différentes machines d'un réseau.

  1. Définir un protocole pour la transmission d'une date contenant la description du jour, mois, heure, minute, seconde.
  2. Écrire la fonction ou la classe de service en réutilisant un des serveurs génériques présentés. Ce service envoie les informations de la date à chaque connexion acceptée, puis referme la socket.
  3. Ècrire un client qui effectue une mise à jour de sa date toute les heures.
  4. Comment tenir compte du décalage de temps du à la requête?

Jeu d'action réseau

On reprend l'exercice sur le jeu <<Ver de Terre>> présenté au chapitre pour l'adapter à plusieurs joueurs réseau. Le but du jeu est de faire grandir un ver de terre le plus longtemps possible. Celui-ci grandit avec le temps sauf s'il touche une case contenant soit un obstacle, soit une partie de lui même. L'intérêt de l'adapter en réseau est donc d'avoir plusieurs vers de terre, dirigé chacun par un client différent, qui interagissent. Quand la tête d'un ver de terre touche un autre ver, le premier disparaît. On effectuera l'affichage graphique sur chaque client.

  1. Définir un petit protocole pour les communications entre le client et le serveur.
  2. Écrire le serveur pour qu'il puisse gérer plusieurs clients. Par défaut un ver de terre a une vitesse dans une direction. À chaque mouvement, celui-ci est transmis aux autres clients pour qu'ils puissent afficher l'état du jeu. Un client peut donner une indication de changement de direction. Le serveur doit en tenir compte. Le serveur ne doit pas attendre l'ordre d'un client pour gérer l'ensemble du jeu.
  3. Écrire un client qui se connecte au serveur et affiche au fur et à mesure les mouvements décidés par le serveur.

Distribution de calculs : jeu de la vie

On cherche à réaliser le jeu de la vie de manière distribuée. Le serveur correspond au monde et maintient sa cohérence selon le nombre de client (en fait une puissance de calcul disponible) connectés. Le serveur prépare une queue de travail pour les différents clients (il est judicieux de préparer plus de taches que de clients permettant ainsi plusieurs calculs par client et de tenir compte des connexions-déconnexions des clients).

Chaque client, en fait un programme prêt à calculer, demande une partie du travail à effectuer, calcule la nouvelle génération de sa partie et renvoie le résultat au serveur.

Quand tout est fait, le serveur l'indique, et peut ensuite passer à une nouvelle génération. Il peut être utile si un client est trop long de proposer sa tache aux autres clients.

Pour simplifier le protocole, on utilisera la communication de valeurs persistantes sur des sockets.

  1. Reprendre le programme présenté au chapitre pour extraire la partie utile à la construction d'une fonction qui lit sur un canal d'entrée un tableau de cellules, calcule la nouvelle génération sur le tableau sans les bords et envoie le résultat sur un canal de sortie.
  2. Écrire un client qui se connecte à un serveur, et qui applique la fonction précédente sur les canaux d'entrée et de sortie de la socket.
  3. Écrire une application qui à partir d'une génération, attend au moins deux connexions de programmes de calcul pour lancer le calcul des générations sur ceux-ci puis récupère les résultats pour afficher la génération suivante.
  4. Modifier cette application pour essayer de balancer la charge entre selon les différents temps de réponse de chaque programme de calcul.

Précédent Index Suivant