Heim  >  Artikel  >  Java  >  Wie schreibe ich ein RMI in Java?

Wie schreibe ich ein RMI in Java?

(*-*)浩
(*-*)浩Original
2019-05-27 09:28:472709Durchsuche

RMI bezieht sich auf Remote Method Invocation. Es handelt sich um einen Mechanismus, der es einem Objekt in einer virtuellen Java-Maschine ermöglicht, Methoden für ein Objekt in einer anderen virtuellen Java-Maschine aufzurufen. Jedes Objekt, das mit dieser Methode aufgerufen werden kann, muss die Remote-Schnittstelle implementieren.

Wie schreibe ich ein RMI in Java?

Wenn ein solches Objekt aufgerufen wird, wird sein Parameter „marshalled“ und es wird von der lokalen virtuellen Maschine an die entfernte virtuelle Maschine gesendet (der Parameter der entfernten virtuellen Maschine ist „unmarshalled“). )Vorgesetzter. Wenn die Methode beendet wird, werden die Ergebnisse von der Remote-Maschine gemarshallt und an die virtuelle Maschine des Aufrufers gesendet. Wenn ein Methodenaufruf dazu führt, dass eine Ausnahme ausgelöst wird, wird diese Ausnahme dem Aufrufer angezeigt.

Bei der Bereitstellung des Fernzugriffs müssen wir zunächst definieren, worauf das entfernte Ende zugreifen kann. In Java erfordert die Definition dieser Art von Schnittstelle die Implementierung der Remote-Schnittstelle

public interface Business extends Remote{
     public String echo(String msg) throws RemoteException;
}

Nach der Definition der Schnittstelle sind diese Funktionen erforderlich Wir müssen es selbst auf der Serverseite implementieren. Daher deklarieren wir eine Klasse, um die von uns bereitgestellte Schnittstelle zu implementieren.

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

Nach der Implementierung dieser Methode stellt sich die Frage, wie sie ausgeführt wird. Da es sich um einen Fernzugriff handelt, müssen eine Portnummer und eine Instanz vorhanden sein, daher müssen wir auch unseren Code registrieren

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

Es gibt zwei Java-Klassen: UnicastRemoteObject und LocateRegistry

Eine Schnittstelle: Registry

Registrierungsschnittstelle: Stellt eine Remote-Schnittstelle für einfache Remote-Objekte bereit. Wird zum Speichern und Abrufen von Referenzen verwendet Remote-Objekte, die über beliebige Variablennamen vom Typ String abgerufen werden. Die Methoden „bind“, „unbind“ und „rebind“ werden zum Ändern der registrierten Namen verwendet. Die Methoden „lookup“ und „list“ werden zum Abfragen des aktuellen bereits gebundenen Objekts verwendet.

UnicastRemoteObject-Klasse: Wird zum Exportieren eines Remote-Objekts verwendet.

LocateRegistry-Klasse: Ein Hilfsklassenprogramm, das zum Abrufen einer Referenz auf ein Remote-Aufrufobjekt verwendet wird, hauptsächlich zum Erstellen eines Remote-Objekts auf einer bestimmten IP-Remote Objekt, um Rückrufe von einem bestimmten Port anzunehmen.

Der einfache Server ist fertig, jetzt schauen wir uns den Client an:

Der Client-Code ist noch einfacher. Wir haben bereits erwähnt, dass wir die Suchmethode der Registry verwenden können. Rufen Sie den aktuell gebundenen Dienst ab, daher müssen wir natürlich zuerst diese Registrierung abrufen

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

Das obige ist der detaillierte Inhalt vonWie schreibe ich ein RMI in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn