Title: Communication par diffusion : Multicast
1Communication par diffusion Multicast
Serveur
Client1
application
Gr
Client2
application
Clientn
application
2Ouvrir un socket demander à se Connecter
Les clients demandent seulement à joindre un
groupe
3Exemple de multicast
Un serveur de citation qui envoie une citation
toutes les minutes à tous les clients qui
écoutent (multicast)
4Scénario dun serveur
Créer le socket d entrée
Créer un paquet de sortie Préparer et Envoyer une
donnée
Fermer le socket d entrée
5Scénario dun client
Créer le socket d entrée
Création d un paquet d entrée Attente de
données en entrée Réception et traitement des
données en entrée
Fermer le socket d entrée
6Classe 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)
7Multicast MulticastSocket
Type de socket utilisé côté client pour écouter
des paquets que le 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 MulticastServerThread qui contient le
cœur du serveur. import java.io.
public class MulticastServer
public static void main(String args) throws
IOException new
MulticastServerThread().start()
8public class MulticastServerThread extends
QuoteServerThread ...
utilisation du constructeur par héritage et
héritage de variables et de la méthode
getNextQuote
9Une nouvelle méthode RUN
public void run() while
(moreQuotes) try byte buf
new byte256 // 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()
10Différences principales
Le DatagramPacket est construit à partir de de
ladresse 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). Ladresse InetAddress "230.0.0.1"
correspond à un identificateur de groupe et non
à une adresse Internet de la machine dun
client Le DatagramPacket est destiné à tous les
clients qui écoutent le port 4446 et qui sont
membres du groupe "230.0.0.1".
11Un 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 ladresse didentification du groupe.
Le serveur utilise un DatagramSocket pour faire
du broadcast à partir de données du client sur un
MulticastSocket. Il aurait pu utiliser aussi un
MulticastSocket. Le socket utilisé par le serveur
pour envoyer le DatagramPacket nest pas
important. Ce qui est important pour le broadcast
est dadresser linformation contenue dans le
DatagramPacket, et le socket utilisé par le
client pour lécouter.
12 MulticastSocket socket new MulticastSocket(4446
) InetAddress group
InetAddress.getByName("230.0.0.1")
socket.joinGroup(group) DatagramPacket
packet for (int i 0 i lt 5 i)
byte buf new byte256
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(g
roup) socket.close()
13Synthèse
Client
Serveur
I/O Stream
I/O Stream
TCP aSocket aServerSocket connecté write read
read write UDP aDatagramSocket aDatagramSo
cket non connecté send receive receive send
Multicast aMulticastSocket aDatagramSocket/
aMulticastSocket receive send
aDatagramPacket
14Définir un nouveau type de socket
Pourquoi ? Préparer les données avant de les
envoyer Préparer les données reçues Exemple Jav
a RMI Sockets spécialisées (marshalling et
unmarshalling) Images Compression et
Décompression Comment ? En spécialisant les
classes de base
15Comment Définir un nouveau type de Sockets
La classe CompressionSocket et ses classes
relatives 4 é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 surcharger getInputStream,
getOutputStream et close. 4. Etendre
java.net.ServerSocket Implémenter le
constructeur et surcharger accept pour créer un
socket du bon type.
16Conclusion
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 à lappel de méthodes
à distance - Java RMI et une normalisation Corba
avec lintégration dun ORB et maintenant les
EJB Entreprise Java Beans et JINI ..
17Retour sur RMI
18Exemple
CLIENT Essifun
SERVEUR de Surnoms
oter
infrastructure
19Communication client serveur
CLIENT
SERVEUR
Connexion au serveur
Attente de requêtes
Préparation de la requête Envoi de la
requête Attente du résultat . Analyse du
résultat reçu
Analyse de la requête .. Exécution . Préparation
de la réponse Envoi de la réponse
20Exemple annuaire des surnoms
1Paulbug ou ENR/nPaul/n/bug/n ou Objet Requête
Seriablizable
EssiFun
SERVEUR de Surnoms
enregistrer( paul , bug )
unmarshalling
marshalling
0111000101000..
enregistrer( paul , bug ) TRUE
unmarshalling
marshalling
101..
TRUE
21Que 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
22Exemple annuaire des surnomset RMI
AnnuaireEssi
listePersonnes
enregistrer lister oter
Enregistrer(AnneMarie,AM) lister()
23Exemple annuaire des surnoms
- interface partie visible de lobjet
(enregistrer, oter, lister, ) - implémentation partie privée inaccessible
depuis dautres objets (listePersonnes un
vecteur de Personne ou un tableau ou .) - interface contrat entre lobjet et le monde
extérieur (save impossible par exemple)
24RMI
public interface Surnoms extends
java.rmi.Remote public Boolean
enregistrer(String nom, String surnom) throws
java.rmi.RemoteException, ServeurSurnoms
.surnoms.ExisteDeja .
25Générateurs
Spécifications des données
Int. Java
IDL
Générateurs
RMIC / Orbix...
Fichiers générés
Stubs Skeletons Proxy (mise en œuvre de la
sérialisation et désérialisation)
26RMIClasses et Interfaces
Remote
Machine locale
Machine distante
InterfaceDistante
InterfaceDistante
Souche
Squelette
Appel méthode m()
Appel méthode m()
ClasseLocale
ClasseDistante
27Interaction Client Enregistreur
RMIRegistry ClassLoader
28Exemple annuaire des surnoms
Protocole CHOICE enregistrerReq 0
SEQUENCEPrintableString nom,
PrintableString surnom enregistrerRep1
BOOLEAN, listerReq 2 NULL,
listerRep 3 SET OF Personnes, .
ASN.1 et norme ISO
XDR et RPC de SUN
Programme surnoms version boolean
enregistrer(nomSurnom) 1
listePersonnes lister(void)2 1
10000
29Générateurs de Stubs
Spécifications des données
XDR
ASN1
Générateurs
RPCGEN / MAVROS
Fichiers générés
Librairie marshalling et unmarshalling squelettes
du client et du serveur
Types de données C Lisp Java
Types de données C
30Les 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ête Marshalling transformation de la
requête pour passer sur le réseau
31points communs
Protocol transmission des requêtes entre
exécutables Dispatching gestion des
threads Des services communs Services de
nommage Interface repository .....
32Reste à approfondir
33Communication réseaux et Internet
Couches de transport Différences entre UDP et
TCP (Développement dun serveur multicast
Ack/NoAck pour gérer la perte des paquets
UDP) Dautres protocoles (RTP/RTCP) (introductio
n du routage multicast ou du tunelling) princip
es du IP / protocole ICMP Service de nommage
DNS Configuration services réseau, routage IP
et DNS dune machine .....
34Spécificités des Réseaux Locaux
Introduction au Réseaux Locaux LANs
Configuration carte réseau dune
machine, Développement dun analyseur de
trafic et standards IEEE 802 IEEE 802.3 et
Ethernet TD 7 Configuration dun Firewall
IPTables, Développement dun analyseur de trafic
(suite) (101)
Réseaux Locaux
Rseaux Locaux
35Réseaux Locaux cours 6 Introduction aux LANs et
standards IEEE 802 TD 6 Configuration carte
réseau dune machine, Développement dun
analyseur de trafic Réseaux Locaux cours 7
IEEE 802.3 et Ethernet TD 7 Configuration dun
Firewall IPTables, Développement dun analyseur
de trafic (suite) (101) Réseaux Locaux cours 8
IEEE 802.3 et Ethernet TP Evalué
36La communication réseaux et Internet Internet
cours 1 IP TD 1 Introduction aux sockets BSD
(et winsock sous windows) (NNN) Internet cours 2
TCP/UDP TD 2 Développement dun serveur
multicast Ack/NoAck pour gérer la perte des
paquets UDP (NNN) Internet cours 3 TCP/UDP
(suite) et exemple dautres protocoles
(RTP/RTCP) TD 3 Développement dun serveur
multicast Ack/NoAck (suite), introduction du
routage multicast ou du tunelling
(NNN) Internet cours 4 Routage IP / protocole
ICMP TD 4 Programmation du ping (messages ICMP)
export (JNI) en Java Internet cours 5
DNS TD 5 Configuration services réseau, routage
IP et DNS dune machine
37Réseaux Locaux cours 6 Introduction aux LANs et
standards IEEE 802 TD 6 Configuration carte
réseau dune machine, Développement dun
analyseur de trafic Réseaux Locaux cours 7
IEEE 802.3 et Ethernet TD 7 Configuration dun
Firewall IPTables, Développement dun analyseur
de trafic (suite) (101) Réseaux Locaux cours 8
IEEE 802.3 et Ethernet TP Evalué
38Conclusion
- Problèmes dintégration et dinteropérabilité
- entre le monde Microsoft et le reste
- Arrivée de internet
- Effort dinteropérabilité et defficacité
- RMI et Corba en Java
- Des nouveautés avec les composants
- les Enterprise Java Beans
- Corba Components
- et aussi C et net Affaire
à suivre
39Quelques 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 comparer Identifier les points
communs Interopérabilité XML une solution
suffisante ?
40Des 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é
....)
41Comment faire interopérer les middlewares ?
Aller vers un middleware standard ? (J2EE /
Corba) Construire une couche au dessus des
middlewares ? des familles de
middlewares, des middlewares génériques
(Jonathan, PolyOrb, ...) Avoir une approche
architecturale ? des design patterns Faire
interopérer des middlewares existants? M2M
42Lavenir ?
Après les approches par composants, des
middlewares au dessus de JMS Une réflexion de
plus haut niveau pour sortir les schémas
communs extérioriser quand et comment on les
utilise ne pas confondre les problèmes avec XML
43Les 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ête Marshalling transformation de la
requête pour passer sur le réseau Protocol
transmission des requêtes entre exécutables
44Les points communs des middlewares en objets
distribués
Activation activer les implémentations des
objets Dispatching gestion des threads Des
services communs Services de nommage Interface
repository .....
45Un bref comparatif
Origine
Microsoft
OMG
JavaSoft
Archi
COM
IDL ORB
Java RMI
DCOM
IIOP
Applet
Interfaces
IUNKnown
Définies en
Définies en
prédéfinies
IDL
Java
46Un bref comparatif
Interface
Agrégation
Héritage
Héritage
composition
extends
Langage
C
C
C
Java
Smalltalk
Infrastr.
Proxy
Stub
Proxy
stub
skeleton
R O
47Un bref comparatif
Serveur
Appli
Appli
Appli Java
DLL
Biblio
BDD
Client
Appli
Appli
Appli Java
DLL
Biblio
Applets
BDD
Création
IFactory
Instancié
Instancié
en LOO
En Java
48Un bref comparatif
Appel
IDispatch
DII
Introsp.
dyn.
beans
Ident.
Reg. OLE
Service de
URL
nommage
Comm.
DCOM
IIOP
RMI
DCE
(TCP/IP)
49Conclusion
- Problèmes dintégration et dinteropérabilité
- entre le monde Microsoft et le reste
- Arrivée de internet
- Effort dinteropérabilité et defficacité
- RMI et Corba en Java
- Des nouveautés avec les composants
- les Enterprise Java Beans
- Corba Components
- et aussi C et net Affaire
à suivre