문제

나는 특정 Java 패키지/라이브러리를 활용하기 위해 Java에서 중고품 서버를 작성했지만 Java 프로그래머는 아닙니다.

문제는; 서버에 대한 첫 번째 RPC 호출에 대한 타임 아웃을보고 있습니다. 후속 요청은 문제없이 실행되며 특정 (그러나 필수) 언어로 작성된 고객에게만 영향을 미칩니다.

내 현재 생각은 서버가 응답에서 시간을 초과한다는 것입니다. 첫 번째 호출시 요청에 필요한 모든 라이브러리를로드해야하기 때문입니다. 일부 중고품 클라이언트 구현은 다른 것보다 타임 아웃을 더 잘 처리해야하므로 요청을 조금 더 오래 열 수 있습니다.

Java에는 첫 번째 요청에 지연되지 않아서 .jar 파일을 처음 시작할 때 사용하는 라이브러리를 사전로드하는 방법이 있습니까?

해결책: 나는 중고품 클라이언트의 시간 초과를 늘려 문제를 해결했습니다 (그리고 일부 추가로 제기). 그러나 나는 static/class.forname 답변을 구현했습니다. 감사!

도움이 되었습니까?

해결책

서버가 라이브가되기 전에로드를 실행할 수 있습니다. 서버를로드하는 방법, 클래스 및 환경이 무엇인지 지정하지는 않았지만 클래스가로드 될 때 클래스 정적 이니셜 라이저가 실행된다는 사실을 활용할 수 있습니다. 따라서 "메인"메소드에서 실행중인 경우 수업이 이와 같은 것을 보게 될 수 있습니다.

public class Foo {

   static {
     //this will be run when the class is loaded
     try { Class.forName("fully.qualified.class.name.that.i.want.to.Load"); }
     catch ...
   }

   public static void main (string args[])
   {
    //run my server...
   }
}

다른 팁

시도하고 싶은 한 가지는 Java 서버 자체 내부에 간단한 클라이언트를 작성하는 것입니다. 이 클라이언트는 서버가 시작될 때 서버에서 일부 메소드를 호출하여 클래스를로드해야합니다. 이 작은 클라이언트가 결과 (또는 콜백)를 얻은 후 서버를 "외부 세계에서 액세스 가능"상태로 넣습니다.

서버를 열기 직전에 연결을 위조하는 것이 좋습니다. 이는 (대부분의) 관련 게으른 초기화가 수행 될 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top