Rugby : le broker Rebol
Article paru dans le magazine Login numéro 89
Reproduction interdite. Tous droits réservés à Posse Press et Olivier Auverlot
Rugby fait déjà
partie des produits incontournables écrits en Rebol. Son objectif est de
permettre l'exécution de code Rebol sur une machine distante et le rapatriement
de résultat sur le poste client émetteur de la requête. Grâce à lui, vous allez
pouvoir mettre en place des services distribués, accessibles de partout et
partagés entre plusieurs applications. Cette technologie est au cœur du
"distributing computing", l'une des principales raisons d'être de
Rebol.
Rugby est développé par Maarten Koopmans et est
entièrement écrit en Rebol. Il fonctionne avec les différentes versions de
l'évaluateur et est totalement indépendant de la plate-forme d'exécution. La
dernière version porte le numéro 4.0.0. Elle est téléchargeable à l'adresse
http://www.rebolforces.com/~erebol. L'objectif de ce produit est de permettre
l'exécution de méthodes distantes aussi simplement que si elles étaient
déclarées sur le poste client. Pour faire cela, vous devez inclure la librairie
RUGBY.R dans votre application client. Ce "moteur" est à la fois
client et serveur : un client Rugby peut ainsi devenir le serveur Rugby d'un
autre client et permettre l'échange d'informations sur le modèle du peer to peer. La seconde étape consiste
à ouvrir un dialogue avec un serveur Rugby à l'aide du mot GET-RUGBY-SERVICE.
Votre client a alors connaissance des fonctionnalités que lui propose le
serveur et peut les utiliser de la même manière que si elles étaient présentes
sur le client lui-même. Il est important de retenir que le code appelé n'est
jamais rapatrié sur le poste client, tout est exécuté à distance sur le
serveur. Seul le résultat transite entre les deux machines.
Pour mieux comprendre, nous allons mettre en place
un service Rugby fonctionnant sur une machine Linux. L'installation sur le
serveur et sur le client se limite à la décompression de l'archive
RUGBY41.TAR.GZ. Pour tester l'exemple, il vous suffit de placer les deux
scripts au même niveau que le fichier RUGBY.R. L'objectif est de mettre en
place un service MEMINFO dont la fonction est de lire le contenu du fichier /proc/meminfo de Linux. Le client
appelle cette méthode et le serveur lui renvoie l'état de la mémoire du
serveur.
Vous allez commencer par mettre en place la partie
serveur. Il s'agit ici de définir la fonction MEMINFO et de la mettre à
disposition d'éventuels clients :
#!/usr/bin/rebol
-s
REBOL
[]
do
%rugby.r
meminfo:
func [] [
return read/lines %/proc/meminfo
]
serve
[ meminfo ]
Le mot SERVE permet de fixer les fonctions
accessibles à un client. Dans cet exemple, il n'y en a qu'une mais vous pouvez
bien sûr ajouter d'autres fonctions au bloc. Rendez exécutable ce script par un
CHMOD +X MEMINFO.R et lancez-le en arrière plan. Si tout se passe bien, votre
premier serveur Rugby est en attente de connexion. Vous pouvez maintenant
écrire la partie cliente. Le script MEMINFO-CLIENT.R débute également par
l'inclusion de la librairie RUGBY.R. Vous devez ensuite déclarer le serveur
Rugby appelé en indiquant l'adresse IP et le port sur lequel celui-ci écoute. A
partir de maintenant, vous pouvez utiliser les fonctions distantes qu'il
héberge. Rien ne distingue ici le mot MEMINFO des autres mots de Rebol si ce
n'est que ce mot est exécuté par un serveur distant.
REBOL
[]
do
%rugby.r
do
get-rugby-service tcp://172.29.143.1:8001
foreach
ele meminfo [ print ele ]

Ce qui étonne avec Rugby, c'est la simplicité et la
rapidité avec laquelle vous pouvez mettre en place des services distribués.
Quelques minutes suffisent pour transformer n'importe quel script Rebol en
un service réparti sur le réseau. De plus, Rugby met à votre disposition une
quantité d'options qui en font un produit remarquable. Vous pouvez utiliser
le protocole HTTP pour traverser un Firewall. Rugby permet de crypter les
données qui sont échangées entre le client et le serveur. Vous avez même la
possibilité de déclencher plusieurs tâches simultanément et de récupérer les
résultats sans avoir à vous soucier de l'ordre dans lequel ils vous parviennent.
Olivier Auverlot