> Java > java지도 시간 > 본문

Java에서 RMI를 작성하는 방법

(*-*)浩
풀어 주다: 2019-05-27 09:28:47
원래의
2703명이 탐색했습니다.

RMI는 원격 메서드 호출을 나타냅니다. Java Virtual Machine의 개체가 다른 Java Virtual Machine의 개체에 대한 메서드를 호출할 수 있도록 하는 메커니즘입니다. 이 메서드로 호출할 수 있는 모든 개체는 원격 인터페이스를 구현해야 합니다.

Java에서 RMI를 작성하는 방법

이러한 개체를 호출할 때 해당 개체의 매개 변수는 "마샬링"되어 로컬 가상 머신에서 원격 가상 머신으로 보냅니다(원격 가상 머신의 매개 변수는 "마샬링 해제"됨). 메서드가 종료되면 원격 컴퓨터의 결과가 마샬링되어 호출자의 가상 컴퓨터로 전송됩니다. 메서드 호출로 인해 예외가 발생하면 해당 예외가 호출자에게 표시됩니다.

원격 액세스를 제공할 때 먼저 원격 끝에서 액세스할 수 있는 항목을 정의해야 합니다. Java에서 이러한 유형의 인터페이스를 정의하려면 원격 인터페이스를 구현해야 합니다.

public interface Business extends Remote{
     public String echo(String msg) throws RemoteException;
}
로그인 후 복사

인터페이스를 정의한 후 이러한 기능을 직접 구현해야 합니다. 서버 측 따라서 우리가 제공하는 인터페이스를 구현하는 클래스를 선언하십시오.

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;
    }
}
로그인 후 복사

이 메서드를 구현한 후 궁금한 점 중 하나는 원격 액세스이므로 포트 번호와 인스턴스가 있어야하므로 코드도 등록해야 합니다

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);
    }
}
로그인 후 복사

여기에는 Java 클래스가 두 개 있습니다. : UnicastRemoteObject 및 LocateRegistry

인터페이스: Registry

Registry 인터페이스: 원격 개체에 대한 참조를 저장하고 얻을 수 있는 간단한 원격 개체에 대한 원격 인터페이스를 제공하며 이는 모든 문자열 유형을 통해 변수 이름을 가져옵니다. , rebind 메소드는 등록된 이름을 변경하는 데 사용됩니다. 조회 및 목록 메소드는 현재 바인딩된 개체를 쿼리하는 데 사용됩니다.

UnicastRemoteObject 클래스: 원격 개체를 내보내는 데 사용됩니다.

LocateRegistry 클래스: 원격 호출 개체 참조를 얻는 데 사용되는 보조 클래스 프로그램, 주로 특정 포트 콜백의 호출을 수락하기 위해 특정 IP에 원격 개체를 구축하는 데 사용됩니다.

간단한 서버가 완성되었습니다. 이제 클라이언트를 살펴보겠습니다.

클라이언트 코드는 훨씬 더 간단합니다. 앞서 레지스트리의 조회 방법을 통해 현재 바인딩된 서비스를 얻을 수 있다고 언급했으므로 먼저 필요한 것이 당연합니다. 이 레지스트리를 얻으려면

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"));
    }
}
로그인 후 복사

위 내용은 Java에서 RMI를 작성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿