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.
-
Définir un protocole pour la transmission d'une date contenant la description du jour, mois, heure, minute, seconde.
- É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.
- Ècrire un client qui effectue une mise à jour de sa date toute les heures.
- 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.
-
Définir un petit protocole pour les communications entre le client et
le serveur.
- É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.
- É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.
-
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.
- É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.
- É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.
- Modifier cette application pour essayer de balancer la charge entre
selon les différents temps de réponse de chaque programme de calcul.