Université Pierre & Marie Curie
U.F.R d'infomatique
Maîtrise -- 2000-01 --
Programmation Objet et Distribution
Tavaux pratiques n° 1
Une machine à café distribuée
Le but du TP est de manipuler à la fois la communication entre threads présents sur un même hôte et la communication par sockets entre programmes situés sur des machines distinctes selon
l'architecture client-serveur.
Principe de fonctionnement du serveur
Le serveur lance un processus (léger) qui simule une machine à
café puis se met à l'écoute des clients. À chaque connexion,
le serveur lance un processus (léger) (que nous appellerons un garçon) pour traiter la requête. Et
continue à écouter.
Le processus simulant la machine et les garçons partageront un
certain nombre de ressources communes : une file d'attente pour les
commandes et une liste des boissons prêtes.
La machine et le serveur partageront une valeur boolèenne (que nous
appelerons on) indiquant si celle-là est active ou non. Le
serveur boucle tant que cette valeur vaut true.
- la file d'attente des commandes sera représentée
par un objet fournissant deux méthodes : add et attendre et contenant un champ pour la file elle-même. Toutes les
opérations sur ce champ doivent être protégées par un verrou.
La méhode add rajoute une commande dans la file ;
une commande est représentée par un numéro de commande
(supposé unique) et un code de boisson. De plus, à chaque ajout,
un signal est émis.
La méthode attendre, comme son nom l'indique, attend qu'une
commande soit passée et renvoie la première valeur de la file.
Pour réaliser la file, utilisez le module Queue.
- la liste des boissons prètes est également représentée
par un objet fournissant deux méthodes : add et attendre
et contenant un champ pour la liste elle-même. Ce dernier sera une
liste d'association indexée par les numéros de commandes, la
valeur associée est le code de la boisson ou un code d'échec. De
même, toutes les opérations sont protégées par un verrou et un
signal est émis à chaque ajout.
Architecture de la machine à café
La machine à café boucle sur la séquence suivante :
- attendre une commande ;
- incrémenter la recette ;
- un délai de préparation de la boisson ;
- décrémenter le stock de boisson ;
- ajouter la boisson (ou le code d'erreur) à la liste des
boisson prêtes.
Pour faire simple, la recette et les stocks de boissons sont des
ressources locales à la machine. Celle-ci affichera périodiquement
le montant de la recette. Lorsque tous les stocks sont épuisés, la
machine met la variable on à faux et s'arrête.
Fonctionnement du garçon
Le garçon :
- annonce les choix possibles ;
- reçoit le code commande ;
- demande le réglement ;
- reçoit le paiement (éventuellement en plusieurs pièces,
pour simplifier, le client fait l'appoint) ;
- place son numéro et le code commande dans file d'attente des
commandes ;
- attend que la boisson soit prête (ou un code d'èchec) ;
- prévient le client du résultat.
On se contentera d'implanter le serveur. On simulera un client en
utilisant telnet.
Indications
Vous réaliserez le serveur en vous inspirant du
lecteur-écrivain ou du serveur pong vu en TD
(vous utiliserez, dans ce second cas, des threads en place des
<< processus lourds >>.)
N'oubliez pas non plus d'utiliser les entrées-sorties compatibles
avec les threads (module ThreadUnix).
This document was translated from LATEX by HEVEA.