Jetons d'abord un coup d'?il à la définition de Java RMI?:
RMI (Remote Method Invocation, invocation de méthode à distance) est implémenté dans JDK1.2 en utilisant grandement Java. améliore la capacité de Java à développer des applications distribuées. En tant que langage de développement réseau populaire, la grande puissance de Java se reflète dans sa puissante capacité à développer des applications réseau distribuées, et RMI est l'une des solutions de base pour développer des systèmes d'applications distribuées réseau Java 100 % purs. En fait, il peut être considéré comme la version Java de RPC. Mais le RPC traditionnel ne peut pas être correctement appliqué aux systèmes d'objets distribués. Java RMI prend en charge la communication entre les objets au niveau du programme stockés dans différents espaces d'adressage pour réaliser des appels à distance transparents entre des objets distants.
étapes d'appel à distance RMI
Schéma d'interaction RMI?:
RMI se compose de 3 parties, la première est rmiregistry (JDK fournit un programme qui peut être exécuté indépendamment (dans le répertoire bin), le second est un programme c?té serveur qui fournit des objets distants au monde extérieur et le troisième est un programme c?té client qui souhaite appeler des méthodes d'objets distants.
Tout d'abord, démarrez le service rmiregistry. Lors du démarrage, vous pouvez spécifier le port sur lequel le service écoute, ou vous pouvez utiliser le port par défaut (1099).
Deuxièmement, le c?té serveur instancie d'abord une classe d'implémentation qui fournit des services localement, puis utilise la méthode de liaison ou de rebind de Naming/Context/Registry (Registry utilisé dans l'exemple ci-dessous) et d'autres classes fournies par RMI pour instancier l'implémentation. tout à l'heure La classe est enregistrée auprès de rmiregistry et exposée avec un nom.
Enfin, le client obtient la classe d'implémentation de RMIService via l'interface locale et un nom connu (c'est-à-dire le nom exposé par rmiregistry), puis utilise la méthode de recherche de Naming/Context/Registry et d'autres classes fournies par RMI. De cette fa?on, bien qu'il n'y ait pas de classe d'implémentation de cette classe localement, toutes les méthodes sont dans l'interface et la méthode de l'objet peut être appelée à distance.
Le processus de communication spécifique entre le stub et le réseau fédérateur?:
Les appels de méthode depuis l'objet client via le stub et la référence distante couche (Remote Reference Layer) et la couche de transport (Transport Layer) vers le bas, transmises à l'h?te, puis à nouveau via la couche de transport, vers le haut via la couche d'appel distant et le réseau fédérateur (squelette), pour atteindre l'objet serveur.
Le stub agit comme un proxy pour l'objet du serveur distant, rendant cet objet disponible pour l'activation par les clients.
La couche de référence distante gère la sémantique, gère la communication d'objets uniques ou multiples et décide si l'appel doit être envoyé à un ou plusieurs serveurs.
La couche transport gère la connexion réelle et assure le suivi des objets distants pouvant accepter les appels de méthode.
Le réseau fédérateur termine l'appel de méthode réel à l'objet serveur et obtient la valeur de retour.
La valeur de retour est renvoyée au client via la couche de référence distante et la couche de transport c?té serveur, puis renvoyée vers le haut via la couche de transport et la couche d'appel distant. Enfin, le stub obtient la valeur de retour.
Exemple simple JAVA RMI
Cet exemple est la méthode d'addition et de soustraction du client appelant l'objet distant c?té serveur. Les étapes spécifiques sont?:
Définir une interface distante
import java.rmi.Remote; import java.rmi.RemoteException; /** * 必須繼承Remote接口。 * 所有參數(shù)和返回類型必須序列化(因?yàn)橐W(wǎng)絡(luò)傳輸)。 * 任意遠(yuǎn)程對(duì)象都必須實(shí)現(xiàn)此接口。 * 只有遠(yuǎn)程接口中指定的方法可以被調(diào)用。 */ public interface IRemoteMath extends Remote { // 所有方法必須拋出RemoteException public double add(double a, double b) throws RemoteException; public double subtract(double a, double b) throws RemoteException; }
(Partage vidéo d'apprentissage?: Tutoriel vidéo Java)
2. Classe d'implémentation d'interface à distance
import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import remote.IRemoteMath; /** * 服務(wù)器端實(shí)現(xiàn)遠(yuǎn)程接口。 * 必須繼承UnicastRemoteObject,以允許JVM創(chuàng)建遠(yuǎn)程的存根/代理。 */ public class RemoteMath extends UnicastRemoteObject implements IRemoteMath { private int numberOfComputations; protected RemoteMath() throws RemoteException { numberOfComputations = 0; } @Override public double add(double a, double b) throws RemoteException { numberOfComputations++; System.out.println("Number of computations performed so far = " + numberOfComputations); return (a+b); } @Override public double subtract(double a, double b) throws RemoteException { numberOfComputations++; System.out.println("Number of computations performed so far = " + numberOfComputations); return (a-b); } }
C?té serveur
import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import remote.IRemoteMath; /** * 創(chuàng)建RemoteMath類的實(shí)例并在rmiregistry中注冊(cè)。 */ public class RMIServer { public static void main(String[] args) { try { // 注冊(cè)遠(yuǎn)程對(duì)象,向客戶端提供遠(yuǎn)程對(duì)象服務(wù)。 // 遠(yuǎn)程對(duì)象是在遠(yuǎn)程服務(wù)上創(chuàng)建的,你無法確切地知道遠(yuǎn)程服務(wù)器上的對(duì)象的名稱, // 但是,將遠(yuǎn)程對(duì)象注冊(cè)到RMI Registry之后, // 客戶端就可以通過RMI Registry請(qǐng)求到該遠(yuǎn)程服務(wù)對(duì)象的stub, // 利用stub代理就可以訪問遠(yuǎn)程服務(wù)對(duì)象了。 IRemoteMath remoteMath = new RemoteMath(); LocateRegistry.createRegistry(1099); Registry registry = LocateRegistry.getRegistry(); registry.bind("Compute", remoteMath); System.out.println("Math server ready"); // 如果不想再讓該對(duì)象被繼續(xù)調(diào)用,使用下面一行 // UnicastRemoteObject.unexportObject(remoteMath, false); } catch (Exception e) { e.printStackTrace(); } } }?. >4. Client Le résultat de fin
import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import remote.IRemoteMath; public class MathClient { public static void main(String[] args) { try { // 如果RMI Registry就在本地機(jī)器上,URL就是:rmi://localhost:1099/hello // 否則,URL就是:rmi://RMIService_IP:1099/hello Registry registry = LocateRegistry.getRegistry("localhost"); // 從Registry中檢索遠(yuǎn)程對(duì)象的存根/代理 IRemoteMath remoteMath = (IRemoteMath)registry.lookup("Compute"); // 調(diào)用遠(yuǎn)程對(duì)象的方法 double addResult = remoteMath.add(5.0, 3.0); System.out.println("5.0 + 3.0 = " + addResult); double subResult = remoteMath.subtract(5.0, 3.0); System.out.println("5.0 - 3.0 = " + subResult); }catch(Exception e) { e.printStackTrace(); } } }est le suivant : fin du serveur
https://blog.csdn.net/xinghun_4/article/details/45787549
Recommandations associées?:Tutoriel d'introduction à Java
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)