2011-12-21 2 views
-1

계전기는 입니다. RMI? 나는 호출 시퀀스에 대해 주위를 둘러 보았지만 만족스런 결과를 얻지 못했다. 스터브의 역할을 클라이언트와 서버 컴퓨터에서 모두 이해할 수 없습니다. RMI 등록은 서버 시스템에서 시작한 후에 무엇을합니까? 때 다음과 같은 주 서버 코드가있다 :RMI의 릴레이 란 무엇입니까?

import java.net.*; 
import java.rmi.*; 

public class AddServer { // when is this code executed 
    public static void main(String args[]) { 
    try { 
     AddServerImpl addServerImpl = new AddServerImpl(); 
     Naming.rebind("AddServer",addServerImpl); // what is it doing ? 
    } catch(Exception exc) { 
     System.out.println("Exception : " + exc); 
     } 
    } 
} 

를 실행?

RMI의 기본 구조는 무엇입니까?

나는 위키 피 디아에서 다음 이미지 image 을 보았다하지만 어떻게 그 기능을 수행하고 무엇 스텁과 골격이 때 인터페이스 구현이라고 이해할 수 없다?

누가 실제로 호출되는 서버 시스템에서 원격 메소드를 호출합니까?

+0

RMI에는 '릴레이'가 없습니다. 나머지 질문은 재 게시입니다. – EJP

답변

0

나는 당신이 알고있는 것과 당신이 분명치 않은 것에 대해 정말로 확신하지 못합니다.

아주 간단하게는 :

1) RMI는 네트워크의 다른 Java 프로세스가 서로 통신 할 수있는 기술입니다.

2) RMI는 명시 적으로 네트워크 메시지 (예 : 소켓 읽기 및 쓰기)를 명시 적으로 보내는 대신 RMI 프로그램에 대한 표준 메서드 호출처럼 보이게합니다.

RMI는 "메소드 인수"를 클라이언트에서 포장하고 네트워크를 통해 전달하는 세부 사항과 수신 측에서 패키지 언 패킹의 세부 사항을 처리하여 서버가 처리 할 수 ​​있도록합니다.

이 모든 것은 "덮개 아래에"발생하며 클라이언트와 서버 프로그램 모두에 투명합니다.

3) 클라이언트 쪽 "덮개 아래"는 "스텁"입니다. "커버 아래"의 서버 측이 클라이언트입니다. RMI 레지스트리는 클라이언트가 단순히 서버를 "찾을"수있게하고 오른쪽 스텁을 올바른 스켈레톤과 일치시킵니다.

4) 서버의 RMI 런타임은 항상 클라이언트 요청에 대해 "수신 대기"하지만 개별 서버 객체는 필요한 경우에만 호출됩니다.

5) 당신은 사진을 인용 :하지만 여기에() 그림을 포함한 자세한 설명입니다 :

http://en.wikipedia.org/wiki/Java_remote_method_invocation

6) 당신은 여전히 ​​"그것을 얻을하지 않는"경우가 여기에 도움이 될 다른 링크입니다 :

http://docs.oracle.com/javase/tutorial/rmi/overview.html

--- 부칙 2011-12-21 ---

Q : 해골을 설명해주십시오.

Q : Naming.rebind (...) 메소드가 호출되는시기는 언제입니까?

Q : 또한 서버 측에서 스텁이 무엇을합니까?

피터 반 데르로, 가장 우수한 Just Java 2에서 자유롭게 인용 린든

1) "RMI"(원격 메소드 호출)은 하나의 시스템에서 개체가 다른 곳에서 객체의 메소드를 호출 할 수 있음을 의미 시스템.

2) 클라이언트 개체가 "스텁"과 대화합니다. 클라이언트에 대한 객체 호출처럼 보입니다. 실제로 스텁은 들어오는 인수를 가져 와서 서버 시스템의 버디로 전송합니다.

3) 클라이언트가 서버 컴퓨터의 친구인데 을 찾으십니까? 클라이언트는 "java.rmi.Naming.Lookup()"을 호출합니다.

4) 서버 컴퓨터는 RMI 서버 클래스에 대해 어떻게 KNOW입니까? Java 서버 TOLD "java.rmi.Naming.bind()"를 호출하여 레지스트리를 등록하십시오.

5) 클라이언트의 원격 호출을 얻으려면 서버 클래스가 어떻게 알 수 있습니까? 여러 가지 방법이 있지만 java.rmi.server.UnicastRemoteObject에서 서버 클래스를 파생시킴으로써 인생을 편하게 만들었 으면 좋겠다.

6) "해골"이란 무엇입니까? 그것은 클라이언트의 "스텁"의 서버 측 아날로그입니다. 그것은 클라이언트 스텁이 네트워크를 통해 출하 한 데이터를 푸는 것 외에는 아무것도하지 않는 베어 본 루틴입니다.

여전히 명확하지 않은 경우 예제를 입력하고 작동 방식을 관찰하십시오.

명령 줄에서 실행하고 서버 명령 줄에 "java -Djava.rmi.server.logCalls = true ..."를 지정하여 작성중인 RMI 호출을 확인하십시오.

'도움이 되길 바랍니다!

+0

당신은 _skeleton_에 대해 설명해 주시겠습니까?'Naming.rebind (...) '메소드가 언제 호출 될 수 있습니까? _stub_는 서버 측에서 무엇을합니까? –

+0

' "덮개 아래"의 서버 쪽이 클라이언트입니까? – EJP

관련 문제