Communication par diffusion : Multicast

Slides:



Advertisements
Présentations similaires
Xavier Blanc Web Services Xavier Blanc
Advertisements

Introduction aux environnements répartis
Cours réseaux Essi2 Anne-Marie Déry
Objets Distribués et Composants
Retour sur RMI.
Programmation Réseaux Illustration : Les Sockets en Java
1 Plan de lenseignement Cours Introduction au réseau via les objets distants (Application à RMI) Ce que cache RMI : programmation socket – mode connecté
Programmation Réseaux Illustration : Les Sockets en Java
Programmation Réseaux Illustration : Les Sockets en Java Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre Java.
Programmation Réseaux Illustration : Les Sockets en Java Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre Java.
Programmation Réseaux Illustration : Les Sockets en Java Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre Java.
Programmation Réseaux Illustration : Les Sockets en Java Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre Java.
Des sockets à RMI Programmation réseau versus programmation objet
Objets Distribués Chronique dune invasion annoncée Pourquoi? Comment? Qui : Corba / COM-DCOM / Java RMI...
Applications distribuées et parallèlisme La communication ne doit pas rester bloquée pour un client.
Programmation Réseaux Illustration : Les Sockets en Java Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre Java.
Programmation Réseaux Illustration : Les Sockets en Java
ESSI AM Dery Merci à Rémi Vankeisbelck, Michel Riveill etc
Communication par diffusion : Multicast Clientn Serveur Client1 Client2 Gr.
ESSI AM Dery Merci à Rémi Vankeisbelck, Michel Riveill etc
Les Sockets et Java Cours Harmonisation Anne-Marie Déry.
Objets Distribués Chronique d ’une invasion annoncée
Module SI4 Applications réparties
Des sockets à RMI. Pourquoi ? Maturation de la technologie orientée objet –ADA, Modula –Smalltalk, C++, Java Maturation des communications Client- Serveur.
Des sockets à RMI.
À travailler seuls Département SI AM Dery Concepts généraux
À travailler seuls Département SI AM Dery Concepts généraux
Programmation Réseaux Illustration : Les Sockets en Java Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre Java.
Programmation Réseaux Illustration : Les Sockets en Java Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre Java.
Des sockets à RMI. Pourquoi ? Maturation de la technologie orientée objet –ADA, Modula –Smalltalk, C++, Java Maturation des communications Client- Serveur.
Introduction aux applications réparties
Plan du cours La sérialisation: – comment stocker et restaurer les Objets? Les interfaces graphiques et la programmation évènementielle. –Comment concevoir.
Cours 6 : XML et les architectures N-tiers – Tier Applicatif

À travailler seuls Concepts généraux Mise en œuvre Java Année
Introduction aux services WEB
Etude des Technologies du Web services
Programmation orientée objet
Java Remote Method Invocation (RMI)
Interopérabilité JOnAS - CORBA
À travailler seuls Concepts généraux Mise en œuvre Java Année
Objets Distribués Chronique d’une invasion annoncée Pourquoi? Comment?
MIDI Sans Frontières Analyse des problèmes relatifs à la communication musicale sur IP Mémoire présenté en vue de lobtention du grade de Licencié en informatique.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure dInformatique (ESI) Plate-forme.NET.
Présentation de CORBA et de IIOP
Développement d’application client/serveur
Communication entre processus From Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edition 3, © Addison-Wesley 2001 Chapitre.
Structures de données avancées : Concepts réseaux et protocole de communication. D. E ZEGOUR Institut National d ’Informatique.
Systèmes distribués Plusieurs technologies existent : Les sockets
CEG3585/CEG3555 Tutorat 2 Hi ver 2013.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Application de gestion des retards
Entrées / Sorties.
Les sockets.
Les RPC remote procedure call
Gestion d’accès aux centrales nucléaires françaises
Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java
Réseaux Informatiques
Mise en place de translation d’adresses NAT/PAT
Java RMI: Remote Method Invocation
PaCO++ André Ribes Réunion Hydrogrid Rennes 15/09/03.
Ingénierie des réseaux
Architecture Client/Serveur
L. Gurret – M. Herve – P. Mignon – J. Prarioz. Introduction  Dernière étape d’analyse  Cahier des charges, spécifications et conception orientée objet.
Modèle à objets et sérialisation Olivier ChamlaFrançois Chastanet.
Java Remote Method Invocation
Synthèse: une journée dans la vie d'une requête Web 5: DataLink Layer5-1.
Applications distribuées Introduction Jean-Jacques LE COZ.
Transcription de la présentation:

Communication par diffusion : Multicast Serveur Client1 application Gr Client2 application Clientn application

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)

Scénario d’un 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

Scénario d’un 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

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 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(); }

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 à 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 n’est pas important. Ce qui est important pour le broadcast 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 aServerSocket connecté write read I/O Stream I/O Stream TCP aSocket aServerSocket connecté write read read write UDP aDatagramSocket aDatagramSocket non connecté send receive receive send Multicast aMulticastSocket aDatagramSocket/ aMulticastSocket aDatagramPacket

Définir un nouveau type de socket Pourquoi ? Préparer les données avant de les envoyer Préparer les données reçues Exemple Java 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 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.

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 Beans et JINI …..

Retour sur RMI

Exemple CLIENT Essifun SERVEUR de Surnoms oter infrastructure

Communication 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

Exemple : annuaire des surnoms 1:Paul:bug 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

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 surnoms et RMI AnnuaireEssi listePersonnes enregistrer lister oter 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 Stubs Skeletons Proxy 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…)

RMI Classes et Interfaces Remote Machine locale Machine distante InterfaceDistante InterfaceDistante Souche Squelette Appel méthode m() Appel méthode m() ClasseLocale ClasseDistante

Interaction Client Enregistreur serveur registre Lookup : où est objetDistant ? stub Il est ici Envoyez le stub Le voici squelette objet Distant result = objetDistant.m() result RMIRegistry + ClassLoader

Exemple : annuaire des surnoms ASN.1 et norme ISO Protocole := CHOICE { enregistrerReq [0] SEQUENCE{PrintableString nom, PrintableString surnom} enregistrerRep[1] BOOLEAN, listerReq [2] NULL, listerRep [3] SET OF Personnes, ….} XDR et RPC de SUN Programme surnoms { version { boolean enregistrer(nomSurnom) = 1; listePersonnes lister(void)=2 }= 1 } = 10000

Générateurs de Stubs Spécifications des données XDR ASN1 Générateurs RPCGEN / MAVROS Fichiers générés Types de données C Lisp Java Librairie marshalling et unmarshalling squelettes du client et du serveur Types de données C

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ête Marshalling : transformation de la requête pour passer sur le réseau

points communs Protocol : transmission des requêtes entre exécutables Dispatching : gestion des threads Des services communs Services de nommage Interface 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 la perte 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 .....

Spécificités des Réseaux Locaux 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 Ethernet TD 7 : Configuration d’un Firewall : IPTables, Développement d’un analyseur de trafic (suite) (101) Réseaux Locaux Rseaux Locaux

Réseaux Locaux cours 6 : Introduction aux LANs et standards IEEE 802 TD 6 : Configuration carte réseau d’une machine, Développement d’un analyseur de trafic Réseaux Locaux cours 7 : IEEE 802.3 et Ethernet TD 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 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 d’un serveur multicast Ack/NoAck pour gérer la perte 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 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 d’une machine

Réseaux Locaux cours 6 : Introduction aux LANs et standards IEEE 802 TD 6 : Configuration carte réseau d’une machine, Développement d’un analyseur de trafic Réseaux Locaux cours 7 : IEEE 802.3 et Ethernet TD 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 comparer Identifier les points communs Interopé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 middlewares génériques (Jonathan, PolyOrb, ...) Avoir une approche architecturale ? des design patterns Faire 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 pour sortir les schémas communs exté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ête Marshalling : transformation de la requête pour passer sur le réseau Protocol : 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 communs Services de nommage Interface repository .....

Un 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

Un 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

Un 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

Un bref comparatif Appel IDispatch DII Introsp. dyn. beans Ident. Reg. OLE Service de URL nommage Comm. DCOM IIOP RMI DCE (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