Compléments sur des concepts et des idiomes Java 2 Architecture de l’application
# 5
'
&
$
%
2.1 Architecture des serveurs
main thread
− infinite loop
− call to select()
and call to the
actions of the
state machine
ChatSelectorMultiServer thread
− infinite loop
− read command lines
to control the server
Access to the state of the server
through ChatServerState.semaphore
La figure de cette diapositive présente l’architecture d’un serveur multiactivité (en anglais, multithread).
L’activité principale du serveur est constituée d’une boucle infinie organisée autour de l’appel à la méthode
select. Une seconde activité est ajoutée pour permettre la saisie de commandes à la console afin de contrôler
le fonctionnement du serveur, par exemple lors des tests pour démarrer ou arrêter un algorithme réparti
entre les serveurs de l’application de tchat. Cette seconde activité est donc une boucle infinie de lecture de
commandes au clavier.
Dans chaque itération de la boucle infinie de l’activité principale, le serveur reçoit soit une demande de
connexion par un client ou un serveur, soit un message d’un client ou d’un serveur, puis le seveur exécute
une action de réaction à cet événement. Cette action modifie l’état du serveur et potentiellement émet des
messages vers des clients et des serveurs. La seconde activité du serveur peut aussi modifier l’état du serveur
et émettre des messages. Donc, l’état du serveur rassemblé dans la classe ChatServerState doit être accédé
en exclusion mutuelle. C’est pourquoi la classe ChatServerState contient un sémaphore qui doit être utilisé
par les deux activités concurrentes du serveur.
Par ailleurs, la forme des boucles de traitement des événements des deux activités du serveur donnent
l’indication de l’orientation naturelle utilisée pour l’insertion d’algorithmes répartis : c’est l’orientation « évé-
nement » présentée dans la section 1.2 du cours d’algorithmique répartie. Ainsi, les algorithmes répartis pré-
sentés selon l’orientation « contrôle » doivent d’abord être traduits dans une forme orientée « événement »
avant d’être insérés dans l’architecture du serveur.
L’orientation « événement » suggère l’utilisation du patron de conception « machine à états ». Aussi,
afin de faciliter l’insertion d’algorithmes répartis dans l’architecture initiale, nous ajoutons un mécanisme de
machine à états. C’est la mise en œuvre de ce patron de conception qui requiert des compléments sur des
concepts et des idiomes Java.
Télécom SudParis — D. Conan — Juin 2013 — CSC 4509 — ASR4 5