Cours Intergiciels
ENSEEIHT – Département Informatique – 2ième année
TP sockets
Daniel Hagimont
Daniel.Hagimont@enseeiht.fr
L'objectif de ce TP est l'initiation
à la programmation répartie. Il consiste à programmer une
application typique comportant de la répartition à l'aide de
Socket. Vous devez implanter un répartiteur de charge (Load
Balancer) qui reçoit des requêtes HTTP et les redirige de
façon aléatoire vers un ensemble de serveurs Web.
Le début de cette classe est le
suivant :
public class LoadBalancer {
static String hosts[] = {"localhost", "localhost"};
static int ports[] = {8081,8082};
static int nbHosts = 2;
static Random rand = new Random();
…
}
A chaque réception d'une requête HTTP (une connexion TCP), LoadBalancer transfère la requête à un des serveurs web (les adresses de ces serveurs sont données par les tables hosts et ports) et LoadBalancer transfère le résultat de la requête à l'émetteur. Le choix du serveur Web est aléatoire (rand.nextInt(nbHosts) retourne un entier entre 0 et nbHosts-1). Pour être efficace, LoadBalancer est évidemment multi-threadé.
Pour la programmation des entrées/sorties, on utilisera :
-
InputStream
- public int read(byte[] b); // bloquante,
retourne le nombre de bytes lus
-
OutputStream
- public void
write(byte[] b, int off, int len); // écrit les len bytes
à la position off
et on
suppose que les requêtes et réponses sont lues ou écrites en
un seul appel de méthode avec un buffer de 1024 bytes. Notez
que cette hypothèse n'est pas vérifieée dans la vrai vie.
Pour tester, vous disposez d'un petit serveur Web (Comanche.java).
Vous pouvez en lancer 2 depuis 2 terminaux avec :
java
Comanche 8081
java
Comanche 8082
Lancez votre LoadBalancer sur la
même machine (il accepte les connexions sur le port 8080).
Entrez dans un navigateur (sur la
même machine) l'URL : localhost:8080/page.html
(la page page.html est sensée est présente dans le répertoire où
vous avez lancé Comanche)