2017-05-24 2 views
-1

원격으로 클라이언트를 무선으로 연결하는 RMI 서버가 있습니다. 무선 연결이 단절 될 때까지 모든 것이 잘됩니다. 내 RMI 서버가 클라이언트로부터 ping을받지 못했음을 감지하고 내가 처리 한 예외를 throw하는 ping을 클라이언트에 실행합니다. 문제는,이 예외가 슬로우되기까지 약 25 초가 걸리기 (위해) 때문에, 예외가 Throw 될 때까지, RMI 서버는 접속 된 다른 클라이언트로부터의 요구에 응답하지 않기 때문입니다.원격 클라이언트 연결이 끊어 질 때 RMI 서버 25 초 제한 시간

저는 며칠 동안 클라이언트와 서버 모두에서 등록 정보를 connectionTimeout, responseTimeout, disableHttp으로 설정했으나 성공하지 못했습니다. 희망은 내 네트워킹을 확실하게하는 방향으로 나를 가리킬 수 있습니다.

답변

0

이 경우에만 Sun RMI system propertiessun.rmi.transport.tcp.responseTimeout이고 sun.rmi.transport.tcp.readTimeout 일 수 있으며 원격 개체를 내보내기 전에 설정해야합니다.

그러나 진단에 의문을 제기합니다. RMI 런타임 시스템이나 RMI 서버는 단일 스레드가 아니므로 25 초 지연은 다른 클라이언트를 보류하지 않습니다.

클라이언트 스톨이 발생하는 경우 RMI의 잘못이 아닙니다. 네트워크 스택이 잘못되어있을 가능성이 있습니다.

나는 전체 전략에 대해 더 질문합니다. RMI는 영구 연결이 아닌 연결 풀을 사용합니다. 서버와 클라이언트를 핑 (Ping)한다는 아이디어는 RMI 철학에 완전히 위배되며 연결을 낭비합니다. 나는이 모든 핑을 없애고 java.rmi.ConnectExceptions으로 처리 할 것입니다. 해당 페이지의 다른 시스템 속성을 통해 연결 수명을 조금만 제어 할 수 있습니다.

사라진 클라이언트를 감지하는 솔루션을 찾고 있다면 훨씬 더 좋은 클라이언트가 있습니다. this answerthis one을 참조하십시오.

+0

내 클라이언트는 클라이언트가 서버에 연결되었음을 알리기 위해 서버에서 원격 메소드를 실행합니다. 의견을 보내 주셔서 감사합니다. 서버가 더 이상 30 초와 같은 적절한 시간 내에 연결되지 않았을 때 클라이언트에게 알리기 위해 강력한 RMI 클라이언트/서버 핸드 셰이크 예제의 방향으로 나를 안내 할 수 있습니까? – MAB

+0

클라이언트 *는 원격 호출 기간을 제외하고는 서버에 연결되어 있지 않습니다. 그러나 연결 풀이 그 후에 연결을 오래 동안 지속합니다. RMI는 의도적으로 사용자의 TCP 연결을 숨기므로 연결된 클라이언트 나 서버에 대해 이야기하는 것이 적절하거나 의미가 없습니다. 원격 세션 패턴을 검색하고 '참조 해제 됨'인터페이스를 사용하여 클라이언트의 연결 해제를 검색하십시오. – EJP

+1

대부분의 평가, 그냥 책을 주문했다, 당신은 가장 인상적인 이력서를 가지고, 당신이 조언을 감사하고 똑바로 포인트 지원에 당신이 제공하는 대응 사람을 바랍니다. – MAB

관련 문제