2013-08-29 1 views
0

매우 간단한 응용 프로그램에서 RMI 연결이 언제 어떻게 생성되는지 이해하려고합니다.언제 RMI 연결이 생성됩니까?

server = new RemoteServer(); 
registry = LocateRegistry.createRegistry(PORT); 
registry.bind("Remote", server); 

클라이언트 부분은 다음과 같습니다

registry = LocateRegistry.getRegistry(HOST, PORT); 
remote = (IRemoteServer) registry.lookup("Remote"); 

이의 그 원격 어떤 방법 doSomething()을 정의하고있다 가정하자. 자, 모든 것이 제대로 설정되어 있고 작동한다고 가정하면 TCP 연결이 정확히 언제 만들어 졌는지 이해하려고합니다.

  • lookup()으로 전화를 걸었을 때 remote.doSomething()을 호출 할 때마다 동일한 연결이 재사용됩니까? lookup() 번으로 전화하면 두 번째 연결이 생성됩니까?
  • remote.doSomething()으로 전화를 걸고 나중에 연결이 끊어 질 때마다 새로운 연결이 생성됩니까?

(This question 어느 정도 관련이 있지만, 하나의 원격 객체에 대한 호출을 호출하는 다중 스레드에 대해서 이야기.)

답변

2

RMI의 연결이 단일 없다

만들어 질 경우 'RMI 연결'이므로 질문이 이미 잘못되었습니다.

예, 아마, 아래 참조 내가 조회를 호출 할 때 만들어 연결()입니다.

remote.doSomething()을 호출 할 때마다 동일한 연결이 재사용되고 있습니까?

원격 객체가 레지스트리와 동일한 호스트 : 포트에있는 경우 아래를 참조하십시오. 그렇지 않으면 확실히 새로운 TCP 연결이있게됩니다.

두 번째로 lookup()을 호출하면 두 번째 연결이 생성됩니까?

아마도 아래를 참조하십시오.

또는 remote.doSomething()을 호출 할 때마다 새로운 연결이 만들어지고 나중에 제거됩니다.

아마도 그렇지 않습니다.

아무 것도 지정되어 있지 않지만 Sun/Oracle 구현은 다양한 RMI system properties, 특히 sun.rmi.transport.tcp.threadKeepAliveTime.의 제어하에 클라이언트 측 연결 풀링을 수행합니다. 기본적으로 60 초 이상 유휴 상태 인 연결은 닫힙니다. 그것은 15 초였습니다.

+0

이제 아래에서 보지 마세요! –