Java 使用RMI


Java 使用RMI

Java使用序列化的方式,可以實現遠端的方法調用,在分工合作時非常方便。本文記錄使用java標准庫實現rmi

一、服務端

結構

.
├── pom.xml
├── src
│   ├── main
│   │   └── java
│   │       └── hello
│   │           ├── HelloImpl.java
│   │           ├── HelloServer.java
│   │           └── IHello.java
│   └── test
│       └── java
│           └── mycom
│               └── AppTest.java
└── target

IHello.java

package hello;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface IHello extends Remote {
    public String sayHelloToSomeBody(String someBodyName) throws RemoteException;

HelloImpl.java

package hello;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class HelloImpl extends UnicastRemoteObject implements IHello {
    public HelloImpl() throws RemoteException {
        super();
    }
    public String sayHelloToSomeBody(String someBodyName) throws RemoteException {
		System.out.println("Connected sucessfully!");
        return "你好," + someBodyName + "!";
    }
}

HelloServer.java

package hello;

import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;

public class HelloServer {
    public static void main(String args[]) {
        try {
            IHello rhello = new HelloImpl();
			LocateRegistry.createRegistry(8888);
            // 如果配置在遠程服務器,把地址換成你的ip
			System.setProperty("java.rmi.server.hostname","127.0.0.1");
            Naming.bind("rmi://localhost:8888/RHello", rhello);
            System.out.println(">>>>>INFO:遠程IHello對象綁定成功!");
        } catch (RemoteException e) {
            System.out.println("創建遠程對象發生異常!");
            e.printStackTrace();
        } catch (AlreadyBoundException e) {
            System.out.println("發生重復綁定對象異常!");
            e.printStackTrace();
        } catch (MalformedURLException e) {
            System.out.println("發生URL畸形異常!");
            e.printStackTrace();
        }
    }
}

在服務端啟動HelloServer.java就會在8888端口監聽請求了

二、客戶端

客戶端只要分享接口文件就好了

啟動代碼

package hello;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

public class Client {
    public static void main(String args[]) {
        try {
            // 填寫服務器ip
            IHello rhello = (IHello) Naming.lookup("rmi://127.0.0.1:8888/RHello");
            System.out.println(rhello.sayHelloToSomeBody("Erich"));
        } catch (NotBoundException e) {
        } catch (MalformedURLException e) {
            e.printStackTrace();
            e.printStackTrace();
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
}

三、小結

可以看到,客戶端只要得到接口文件就能執行操作,而具體的實現交給服務端完成,這種架構可以解耦調用和實現


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM