communication par diffusion : multicast application clientn serveur application client1 application...
TRANSCRIPT
Communication par diffusion : Multicast
application
Clientn
Serveur
application
Client1
application
Client2
Gr
Ouvrir un socket = demander à se Connecter
Les clients demandent seulement à joindre un groupe
Exemple de multicast
Un serveur de citation qui envoie une citation toutes les minutes à tous les clients qui écoutent (multicast)
Créer un paquet de sortiePréparer et Envoyer une donnée
Scénario d’un serveur
Fermer le socket d ’entrée
Créer le socket d ’entrée
Scénario d’un client
Création d ’un paquet d ’entréeAttente de données en entréeRéception et traitement des données en entrée
Fermer le socket d ’entrée
Créer le socket d ’entrée
Classe MulticastServer
Des constructeurs : par défaut, port à utiliser
Des accesseurs en lecture : adresse du groupe (getInterface…)
Des méthodes : pour envoyer un paquet datagramme, pour joindre ou quitter un groupe (send, joinGroup, leaveGroup)
Multicast: MulticastSocket
Type de socket utilisé côté client pour écouter des paquets quele serveur « broadcast » à plusieurs clients. .
Une extension du QuoteServer : broadcast à intervalle régulier à tous ses clients
Le serveur a un nouveau nom et crée un MulticastServerThreadqui contient le cœur du serveur.
import java.io.*; public class MulticastServer { public static void main(String[] args) throws IOException { new MulticastServerThread().start(); } }
public class MulticastServerThread extends QuoteServerThread { ... }
utilisation du constructeur par héritage et héritage de variables et de la méthode getNextQuote
Une nouvelle méthode RUN
public void run() { while (moreQuotes) { try { byte[] buf new byte[256]; // don't wait for request...just send a quote
String dString = null; if (in == null) dString = new Date().toString(); else dString = getNextQuote(); buf = dString.getBytes(); InetAddress group = InetAddress.getByName("230.0.0.1"); DatagramPacket packet; packet = new DatagramPacket(buf, buf.length, group, 4446); socket.send(packet);
try {sleep((long)Math.random() * FIVE_SECONDS); } catch (InterruptedException e) { } } catch (IOException e) { e.printStackTrace(); moreQuotes = false;} } socket.close();}
Différences principales
Le DatagramPacket est construit à partir de de « l’adresse de plusieurs clients »
L ’adresse et le no de port sont câblés
no de port 4446 (tout client doit avoir un MulticastSocket lié à ce no). L’adresse InetAddress "230.0.0.1" correspond à un identificateur de groupe et non à une adresse Internet de la machine d’un client
Le DatagramPacket est destiné à tous les clients qui écoutent le port 4446 et qui sont membres du groupe "230.0.0.1".
Un nouveau Client
Pour écouter le port 4446, le programme du client doit créer son MulticastSocket avec ce no. Pour être membre du groupe "230.0.0.1" le client adresse la méthode joinGroup du MulticastSocket avec l’adresse d’identification du groupe.
Le serveur utilise un DatagramSocket pour faire du broadcast à partirde données du client sur un MulticastSocket. Il aurait pu utiliser aussiun MulticastSocket. Le socket utilisé par le serveur pour envoyer leDatagramPacket n’est pas important. Ce qui est important pour lebroadcast est d’adresser l’information contenue dans le DatagramPacket, et le socket utilisé par le client pour l’écouter.
MulticastSocket socket = new MulticastSocket(4446); InetAddress group = InetAddress.getByName("230.0.0.1"); socket.joinGroup(group);
DatagramPacket packet; for (int i = 0; i < 5; i++) { byte[] buf = new byte[256]; packet = new DatagramPacket(buf, buf.length); socket.receive(packet);
String received = new String(packet.getData()); System.out.println("Quote of the Moment: " + received); } socket.leaveGroup(group);
socket.close();
Synthèse
Client Serveur
TCP aSocket aServerSocketconnecté write read
read write
UDP aDatagramSocket aDatagramSocketnon connecté send receive
receive send
Multicast aMulticastSocket aDatagramSocket/aMulticastSocket
receive send
I/O Stream I/O Stream
aDatagramPacket
Définir un nouveau type de socket
Pourquoi ?Préparer les données avant de les envoyerPréparer les données reçues
ExempleJava RMI Sockets spécialisées (marshalling et unmarshalling)
Images : Compression et Décompression
Comment ?En spécialisant les classes de base
Comment Définir un nouveau type de Sockets
La classe CompressionSocket et ses classes relatives4 étapes
1. Etendre java.io.FilterOutputStream pour créer un output stream pour ce type de Socket. Surcharge de méthodes si nécessaire. 2. Etendre java.io.FilterInputStream 3. Etendre java.net.Socket . Implémenter les constructeurs appropriés et surchargergetInputStream, getOutputStream et close. 4. Etendre java.net.ServerSocket Implémenter le constructeur et surcharger acceptpour créer un socket du bon type.
Conclusion
Une large bibliothèque pour traiter les sockets et différents types de communication entre Clients et Serveurs dans Java
Une extension naturelle par abstraction à l’appel de méthodes à distance - Java RMI
et une normalisation Corba avec l’intégration d’un ORB
et maintenant les EJB : Entreprise Java Beanset JINI …..
Retour sur RMI
Exemple
CLIENT Essifun SERVEUR de Surnoms
oter
infrastructure
Communication client serveur
CLIENT SERVEUR
Préparation de la requêteEnvoi de la requêteAttente du résultat….
Analyse du résultat reçu
Connexion au serveur Attente de requêtes
Analyse de la requête…..Exécution….Préparation de la réponseEnvoi de la réponse
Exemple : annuaire des surnoms
EssiFun SERVEUR de Surnoms
enregistrer(« paul », »bug »)
marshalling
marshalling
unmarshalling
unmarshalling
0111000101000..
101..
enregistrer(« paul », »bug »)TRUE
TRUE
1:Paul:bug ou ENR/nPaul/n/bug/n ou Objet Requête Seriablizable
Que peut on automatiser ?
Au minimum, la phase de marshalling/unmarshalling(hétérogéneité des langages, des systèmes, etc)
Selon les cas, le squelette du serveur les appels distants du client
Exemple : annuaire des surnomset RMI
enregistrerlisteroter
AnnuaireEssi
listePersonnes
Enregistrer(AnneMarie,AM)lister()
Exemple : annuaire des surnoms
• interface : partie visible de l’objet (enregistrer, oter, lister, …)
• implémentation : partie privée inaccessible depuis d’autres objets (listePersonnes : un vecteur de Personne ou un tableau ou ….)
• interface = contrat entre l’objet et le monde extérieur (save impossible par exemple)
RMI
public interface Surnoms extends java.rmi.Remote{public Boolean enregistrer(String nom, String surnom) throws
java.rmi.RemoteException, ServeurSurnoms.surnoms.ExisteDeja ;
…. }
Générateurs
RMIC / Orbix...
IDL Int. JavaSpécificationsdes données
Générateurs
Fichiersgénérés Stubs Skeletons Proxy
(mise en œuvre de la sérialisationet désérialisation…)
RMI
Classes et Interfaces
ClasseLocale
Souche Squelette
ClasseDistante
InterfaceDistante
Remote
Appel méthode m() Appel méthode m()
Machine locale Machine distante
InterfaceDistante
Interaction Client Enregistreur
client serveur
client registreLookup : où est objetDistant ?
stub
Il est ici
Envoyez le stub
Le voicistub squelette
objetDistant
result = objetDistant.m()
result
RMIRegistry + ClassLoader
Exemple : annuaire des surnoms
XDR et RPC de SUN
Protocole := CHOICE { enregistrerReq [0] SEQUENCE{PrintableString nom,
PrintableString surnom} enregistrerRep[1] BOOLEAN, listerReq [2] NULL, listerRep [3] SET OF Personnes, ….}
Programme surnoms { version {
boolean enregistrer(nomSurnom) = 1; listePersonnes lister(void)=2 }= 1} = 10000
ASN.1 et norme ISO
Générateurs de Stubs
RPCGEN / MAVROS
ASN1 XDR
Librairie marshalling et unmarshalling
squelettes du client et du serveur
Spécificationsdes données
Générateurs
Types de donnéesC Lisp Java
Types de données
C
Fichiersgénérés
Les points communs des approches distribuées
Adressage : à tout serveur (objet ou programme)doit être affecté une référence unique
Transport : pour établir une communication entre 2 nœuds
et transmettre une requêteMarshalling :
transformation de la requête pour passer sur leréseau
points communs
Protocol :transmission des requêtes entre exécutables
Dispatching :gestion des threads
Des services communsServices de nommageInterface repository.....
Reste à approfondir
Communication réseaux et Internet
Couches de transport
Différences entre UDP et TCP(Développement d’un serveur multicast Ack/NoAck pour gérer laperte des paquets UDP)
D’autres protocoles (RTP/RTCP)(introduction du routage multicast ou du tunelling)
principes du IP / protocole ICMP
Service de nommage
DNS Configuration services réseau, routage IP et DNS d’une machine
.....
Introduction au Réseaux Locaux LANs Configuration carte réseau d’une machine,Développement d’un analyseur de trafic
et standards IEEE 802 : IEEE 802.3 et EthernetTD 7 : Configuration d’un Firewall : IPTables,Développement d’un analyseur de trafic (suite) (101)
Réseaux LocauxRseaux Locaux
Spécificités des Réseaux Locaux
Réseaux Locaux cours 6 : Introduction aux LANs et standards IEEE 802TD 6 : Configuration carte réseau d’une machine,Développement d’un analyseur de trafic
Réseaux Locaux cours 7 : IEEE 802.3 et EthernetTD 7 : Configuration d’un Firewall : IPTables,Développement d’un analyseur de trafic (suite) (101)
Réseaux Locaux cours 8 : IEEE 802.3 et Ethernet
TP Evalué
La communication réseaux et InternetInternet cours 1 : IPTD 1 : Introduction aux sockets BSD (et winsock sous windows) (NNN)
Internet cours 2 : TCP/UDPTD 2 : Développement d’un serveur multicast Ack/NoAck pour gérer laperte des paquets UDP (NNN)
Internet cours 3 : TCP/UDP (suite) et exemple d’autres protocoles (RTP/RTCP)TD 3 : Développement d’un serveur multicast Ack/NoAck (suite),introduction du routage multicast ou du tunelling (NNN)
Internet cours 4 : Routage IP / protocole ICMPTD 4 : Programmation du ping (messages ICMP) + export (JNI) en Java
Internet : cours 5 : DNSTD 5 : Configuration services réseau, routage IP et DNS d’une machine
Réseaux Locaux cours 6 : Introduction aux LANs et standards IEEE 802TD 6 : Configuration carte réseau d’une machine,Développement d’un analyseur de trafic
Réseaux Locaux cours 7 : IEEE 802.3 et EthernetTD 7 : Configuration d’un Firewall : IPTables,Développement d’un analyseur de trafic (suite) (101)
Réseaux Locaux cours 8 : IEEE 802.3 et Ethernet
TP Evalué
Conclusion
• Problèmes d’intégration et d’interopérabilité
entre le monde Microsoft et le reste
• Arrivée de internet – Effort d’interopérabilité et d’efficacité– RMI et Corba en Java
• Des nouveautés avec les composants– les Enterprise Java Beans – Corba Components– et aussi C# et net Affaire à suivre
Quelques interrogations ?
Comment choisir le bon middleware (intergiciel) ?Il y en a de plus en plus
Corba, RMI, DCOM, DSA + CCM, J2EE + Web Services, .net ....
Savoir les comparerIdentifier les points communsInteropérabilité : XML une solution suffisante ?
Des Critères de Comparaisons
Autour du concept objet ?Communication synchrone ou asynchrone ?Description via des interfaces ou des messages ?Communication directe ou indirecte ?Spécifique ou indépendant langage ?Possibilité de transformation de messages ou non ?Protocole de communication binaire ou textuelle ?Prise en compte de QoS ou non ?(transaction, sécurité ....)
Comment faire interopérer les middlewares ?
Aller vers un middleware standard ? (J2EE / Corba)
Construire une couche au dessus des middlewares ? des familles de middlewares, des middlewaresgénériques (Jonathan, PolyOrb, ...)Avoir une approche architecturale ?
des design patternsFaire interopérer des middlewares existants?
M2M
L’avenir ?
Après les approches par composants,des middlewares au dessus de JMS
Une réflexion de plus haut niveau poursortir les schémas communsextérioriser quand et comment on les utilise
ne pas confondre les problèmes avec XML
Les points communs des middlewares en objets distribués
Adressage : à tout objet doit être affecté une référence unique
Transport : pour établir une communication entre 2 nœuds
et transmettre une requêteMarshalling :
transformation de la requête pour passer sur leréseauProtocol :
transmission des requêtes entre exécutables
Les points communs des middlewares en objets distribués
Activation :activer les implémentations des objets
Dispatching :gestion des threads
Des services communsServices de nommageInterface repository.....
Un bref comparatif
Origine Microsoft OMG JavaSoft
Archi COMDCOM
IDL ORBIIOP
Java RMIApplet
Interfaces IUNKnownprédéfinies
Définies enIDL
Définies enJava
Un bref comparatif
Interface+ Agrégationcomposition
Héritage Héritageextends
Langage C++ C C++Smalltalk
Java
Infrastr. Proxystub
Stubskeleton
ProxyR O
Un bref comparatif
Serveur AppliDLL
AppliBiblioBDD
Appli Java
Client AppliDLL
AppliBiblioBDD
Appli JavaApplets
Création IFactory Instanciéen LOO
InstanciéEn Java
Un bref comparatif
Appeldyn.
IDispatch DII Introsp.beans
Ident. Reg. OLE Service denommage
URL
Comm. DCOMDCE
IIOP RMI(TCP/IP)
Conclusion
• Problèmes d’intégration et d’interopérabilité
entre le monde Microsoft et le reste
• Arrivée de internet – Effort d’interopérabilité et d’efficacité– RMI et Corba en Java
• Des nouveautés avec les composants– les Enterprise Java Beans – Corba Components– et aussi C# et net Affaire à suivre