Le robot (ou le moteur de recherche) écoute en permanence sur un port TCP particulier afin de traiter les informations de mises à jour envoyées par les serveurs web auquels le robot s'est enregistré. C'est un serveur multithread qui a la fonctionnalité de traiter plusieurs requêtes simultanéments.

Le shema ci dessus illustre la maniere dont le serveur Web notifie les mises à jour de ses sous espaces Web au moteur de recherche (Cette fois ci, c'est le serveur Web qui est à l'initiative des communications). Le serveur web dispose d'un scheduler qui va lancer un programme java nommé Sender qui s'occupe d'envoyer les informations de mises à jour propre à chacun des moteurs de recherche qui se sont enregistrés. A chaque réception d'une requête le robot disposant du module HttpServeur va instancier un ServerThread pour gérer la requête. De ce fait plusieurs ServerThread peuvent fonctionner parallelement et enregistrrer simultanément les mises à jours des différents sites Web. Les informations de mises à jour sont stockeés par défaut dans un répertoire Recieve du disque dur. Les noms des fichiers reçus sont crées automatiquement et sont uniques. En effet leurs noms sont composés de la date de réception (jours,mois,heures,minutes,secondes) sous la forme Unix, c'est à dire un entier représentant la date depuis 1970. Une fois la réception réussie le robot envoie un acquittement positif au serveur Web. Si pour une raison ou pour une autre l'acquittement est négatif le serveur Web renouvellera la notification.

1-L'objet Serveur et ServerThtread
1.1- Descriptions

L'objet Serveur est en fait un programme qui s'éxécute puisqu'il dispose de la méthode main(). Son rôle est d'instancier un serverSocket sur un port TCP particulier pour ouvrire une porte de communication et de boucler infiniment sur la socket, c'est à dire être l'écoute des notifications susceptible de venir.
Quand une requête arrive le Server instancie alors un ServerThread.
Ce dernier objet dispose des objets RupHttpRequest et RupHttpResponse qui encapsule respectivement le flux d'entrée et le flux de sortie. Lors de l'instanciation du Thread la méthode run() est éxécutée. Cette derniere lance à son tour la méthode handleCmd() qui s'occupe de gérer correctement les entrées sorties. Chaque nouveau thread crée une nouvelle socket pour communiquer avec le client. Ainsi le serveur est une fraction de milisecondes indisponibles.

1.2- Fonctionnement

Pour lancer le service de réception de notifications du moteur de recherche il suffit de taper la commande suivante.

java -classpath rup1.0.jar rup.robot.Server 4445

On suppose que le plug-in rup1.0.jar se trouve dans le répertoire courant. Si ce n'est pas le cas alors rajouter le path dans la commande : "path/rup.1.0.jar". L'argument du programme Server est le numéro de port sur lequel on veut lancer le service.

A l'éxécution de cette commande on obtient :

Serveur : starting on yeromathlon/192.168.0.1
Serveur : debut de boucle, Wait Mode ...

Le service est lancé et attend les notifications des serveurs Web auquels le moteur de recherche s'est enregistré.

Lors de la réception d'une notification le service de réception affiche les infos suivantes :

Serveur : demarrage du nouveau Thread
Serveur : debut de boucle, Wait Mode ...

=> Un nouveau thread a été instancié et gére la requête, le serveur se remet en mode attente.

Thread 0: ServerThread v0.0001 => version du Thread
Thread 0: Analyse de la commande => la commande est annalysée et ses informations sont écrites dans le répertoire recieve
SendHttpHeaders => une réponse positive est renvoyé au serveur web
Thread 0: Fermeture de la socket => le thread est détruit et la socket aussi.

Les fichiers présents dans le répertoire Recieve sont de la forme suivante :

@rupinfo { http://localhost/
URLS-Changed{72}: [944805601,Fri Dec 10 03:00:01 ART 1999] file://localhost/code/test.gif
URLS-New{77}: [944892001,Sat Dec 11 03:00:01 ART 1999] file://localhost/code/doc/hello.gif }

Chacun est ensuite libre dans la maniere de récuperer ces informations.

1.3- structure des fichiers d'informations

 

Rup Implementation 1.0 par David Bromberg.