Maison > Java > javaDidacticiel > le corps du texte

Comment écrire un RMI en Java

(*-*)浩
Libérer: 2019-05-27 09:28:47
original
2704 Les gens l'ont consulté

RMI fait référence à l'invocation de méthode à distance. C'est un mécanisme qui permet à un objet dans une machine virtuelle Java d'appeler des méthodes sur un objet dans une autre machine virtuelle Java. Tout objet pouvant être appelé avec cette méthode doit implémenter l'interface distante.

Comment écrire un RMI en Java

Lors de l'appel d'un tel objet, son paramètre est "marshallé" et l'envoie de la machine virtuelle locale vers une machine virtuelle distante (le paramètre de la machine virtuelle distante est "non marshallé" )supérieur. Lorsque la méthode se termine, les résultats de la machine distante sont rassemblés et envoyés à la machine virtuelle de l'appelant. Si un appel de méthode entraîne la levée d’une exception, cette exception sera indiquée à l’appelant.

Lors de la fourniture d'un accès à distance, nous devons d'abord définir à quoi l'extrémité distante peut accéder. En Java, définir ce type d'interface nécessite d'implémenter l'interface distante

public interface Business extends Remote{
     public String echo(String msg) throws RemoteException;
}
Copier après la connexion

Après avoir défini l'interface, ces fonctions. Nous devons l'implémenter nous-mêmes côté serveur. Par conséquent, nous déclarons une classe pour implémenter l'interface que nous fournissons.

public class BusinessImpl implements Business{

    @Override
    public String echo(String msg) throws RemoteException {
        if("quit".equalsIgnoreCase(msg)) {
            System.out.println("Server will be shutdown");
            System.exit(0);
        }
        System.out.println("Message from client:"+msg);
        return "Server response:"+msg;
    }
}
Copier après la connexion

Après avoir implémenté cette méthode, une question est de savoir comment l'exécuter. Puisqu'il s'agit d'un accès à distance, il doit y avoir un numéro de port et une instance, nous devons donc également enregistrer notre code

public class Server {

    public static final String SERVER_REGISTER_NAME = "BusineeDemo";
    
    public static void main(String[] args) throws RemoteException {
        int port = 2016;
        Business business = new BusinessImpl();
        UnicastRemoteObject.exportObject(business,port);
        Registry registry = LocateRegistry.createRegistry(1099);
        registry.rebind(SERVER_REGISTER_NAME, business);
    }
}
Copier après la connexion

Il existe deux classes Java : UnicastRemoteObject et LocateRegistry

Une interface : Registry

Interface de registre : Fournit une interface distante pour les objets distants simples Utilisé pour stocker et obtenir des références à les objets distants, qui sont obtenus via des noms de variables de type chaîne arbitraires. Les méthodes de liaison, de déconnexion et de reconnexion sont utilisées pour modifier les noms enregistrés. Les méthodes de recherche et de liste sont utilisées pour interroger l'objet déjà lié actuel.

Classe UnicastRemoteObject : utilisée pour exporter un objet distant

Classe LocateRegistry : un programme de classe auxiliaire utilisé pour obtenir une référence à un objet appelant distant, principalement pour construire un objet distant sur une IP distante spécifique objet pour accepter les rappels d’un port spécifique.

Le serveur simple est terminé, regardons maintenant le client :

Le code client est encore plus simple. Nous avons mentionné plus tôt que nous pouvons utiliser la méthode de recherche du Registre. Obtenez le service actuellement lié, donc naturellement, nous devons d'abord obtenir ce registre

public class Client {

    public static void main(String[] args) throws RemoteException, NotBoundException {
        // Registry registry = LocateRegistry.getRegistry("localhost");
        Registry registry = LocateRegistry.getRegistry("localhost", 1099);
        Business business = (Business) registry.lookup(Server.SERVER_REGISTER_NAME);
        System.out.println(business.echo("Hello Server"));
    }
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal