ENVIRONNEMENTS DISTRIBUES
& COMMUNICATIONS DANS LES RESEAUX
La situation étant la suivante :
-
Grâce à différentes techniques il est possible de visualiser une scène 3D
à l'aide d'un browser web.
-
Internet étant avant tout une interconnexion de réseaux,
il dispose de nombreuses technologies pour faire communiquer les applications
Ainsi nous avons désormais en main tous les outils
pour créer des mondes virtuels sur le web.
PROTOCOLES & CONSORT
- API bas niveaux :
- API-Sockets (TCP/UDP)
- Transfert de données normalisé :
- HTTP (flux encapsulé par cgi, java servlets),
Irc, Muds ...
- Protocole haut niveau :
- RMI (Java) , IIOP (CORBA) , COM/DCOM (Microsoft) ...
On choisira un protocole haut niveau supporté par les clients web.
Pour des raisons de simplicité de mise en oeuvre, j'ai opté pour Java RMI.
RMI : Remote Method Invocation
- Usage
-
RMI est un protocole client/serveur propre au langage java.
-
Ce package permet de faire dialoguer des objets java par Internet.
-
RMI est un peu occulté par le boom Corba, il n'empêche
qu'il a quelques différences :
- Simplicité de mise en oeuvre :
Il n'est pas nécessaire d'utiliser un serveur , le serveur est une classe java
- Encapsulation par dessus http : passe les proxies
- RMI est supporté par les browsers netscape 3+
- - marche sous IE qu'avec Java plugin (J1.2+)
ou avec les classes RMI externes
RMI repose sur l'API Sockets (IP), le port par défaut est 1099,
ceci peut poser problème lorsque le client se connecte derrière un firewall
ne laissant passer que le port http (80).
Une alternative permet de contourner le problème : l'
encapsulation sur http par l'interface CGI (méthode POST),
pour cela il faut installer le programme java-rmi.cgi qui fait le pont
entre le serveur httpd et le serveur RMI .
Source Java RMI
/**
* Serveur RMI
**/
// [...]
// Gestionnaire de securité du serveur
System.setSecurityManager( new RMISecurityManager() );
//Service de nommage
Registry r=null;
// port par défaut du "socket rmi" : 1099
r = LocateRegistry.createRegistry(1099);
MonObjetDis oserv = new MonObjetDis();
r.rebind("objetd_0",oserv);
//l'objet est donc accessible par les clients
// [...]
/**
* Client RMI
**/
// [...]
MonObjetDisI o ;
// Connecte l'instance de l'objet distribué
o = (MonObjetDisI) Naming.lookup("rmi://localhost/objetd_0";
// o.modify();
// [...]
CONCLUSION
Il faut traiter les problèmes classiques de RVD :
- Maintenir la cohérence
- Interpolation
- Montée en charge
RESSOURCES : Systèmes Distribués
- RMI
-
Tutorial :
http://java.sun.com/docs/books/tutorial/rmi/index.html
-
Faq :
http://www.javasoft.com/products/javaspaces/faqs/rmifaq.html
,
http://java.sun.com/products/jdk/1.2/docs/guide/rmi/faq.html
-
DIS-Java-VRML Working Group
-
IEEE DIS : Distributed Interactive Simulation
-
Infrastructure pour Réalité Virtuelle distribuée
du Web3D Consorsium
-
But du projet : Implantation du protocole DIS en Java & VRML / Distribution GPL