문제

JDK 6에 포함 된 HTTP 서버는 웹 서비스를 개발하는 데 큰 도움이되지만 엔드 포인트를 게시 한 다음 코드가 충돌하여 서버를 실행하는 상황이 있습니다.

참조 (또는 게시 된 엔드 포인트)에 대한 참조를 잃어버린 후 임베디드 서버를 어떻게 종료합니까?

올바른 솔루션이 없습니다

다른 팁

아래 코드를 사용하여 시작합니다

    this.httpServer = HttpServer.create(addr, 0);
    HttpContext context = this.httpServer.createContext("/", new DocumentProcessHandler());
    this.httpThreadPool = Executors.newFixedThreadPool(this.noOfThreads);
    this.httpServer.setExecutor(this.httpThreadPool);
    this.httpServer.start();

그리고 그것을 중지하기 위해 코드 아래

        this.httpServer.stop(1);
        this.httpThreadPool.shutdownNow();

나는 전에이 서버를 사용한 적이 없으며 좋은 문서를 찾을 수 없습니다. 아마도이 우아한 솔루션은 이미 당신에게 일어 났지만, 나는 그것들을 언급 할 것이라고 생각했습니다.

com.sun.net.httpserver.httpserver에 httpserverimpl이라는 구현 클래스가 있습니다. stop ()라는 메소드가 있습니다.

또는 서버 소켓에서 듣는 스레드를 찾아 인터럽트 ()를 호출 할 수 있습니다.

그렇다면 참조를 잃지 않는 것은 어떻습니까? 코드가 충돌한다고 말하면 어딘가에 예외가 있다고 가정합니다. 정확히 어디에? 따라서이 예외를 가로 채울 수있는 사람은 분명히 httpserver에 대한 언급이 필요합니다.

편집하다: 오. 이 경우 Httpserver를 사용하여 전체 JVM을 죽이고 싶지 않다면 환경에 어떤 형태의 IPC를 제공해야합니다. 예를 들어 Java 프로그램 (및 Java 프로그램에서 호출 할 수있는 RMI를 통한 명령 채널). 따라서 개미).

또 다른 솔루션은 서버가 "비밀"쿠키 쿼리를 듣게하는 것입니다. 예를 들어 개미 스크립트가 쿠키를 검색 할 수 있도록 시작시 쿠키를 인쇄/저장하고 "비밀"URL에 쿼리를 발사 할 수 있습니다. 서버가 우아하게 빠져 나옵니다.

나는 빠른 RMI 솔루션과 함께 갈 것입니다.

netstat -a

포트가 열린 프로세스의 PID (포트를 알고 있다고 가정) 및

kill -9 $pid

과정을 죽이기 위해.

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