Вопрос

Http-сервер, встроенный в JDK 6, является большим подспорьем в разработке веб-сервисов, но у меня была ситуация, когда я опубликовал конечную точку, а затем произошел сбой кода и сервер перестал работать.

Как завершить работу встроенного сервера после потери ссылки на него (или опубликованной конечной точки)?

Нет правильного решения

Другие советы

Я использую приведенный ниже код, чтобы запустить его

    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().

Или, возможно, вы можете найти поток, прослушивающий серверный сокет, и вызвать функцию interrupt().

Шон

Тогда как насчет того, чтобы не терять ссылку?Когда вы говорите, что ваш код выходит из строя, я предполагаю, что вы где-то получаете исключение.Где именно?Таким образом, кто-то, способный перехватить это исключение, очевидно, также должен иметь ссылку на HTTPServer, которую вам, возможно, придется передавать самостоятельно.

Редактировать:О.В этом случае, если вы не хотите уничтожать всю JVM с HTTPServer в ней, тогда вам нужно будет предложить некоторую форму IPC для среды, напримеркомандный канал через RMI, который может быть вызван из программы Java (и, следовательно, Ant).

Другим решением было бы заставить сервер прослушивать какой-нибудь "секретный" запрос cookie, где вы, напримерраспечатайте / сохраните файл cookie при запуске, чтобы Ant-скрипт мог извлечь файл cookie, и вы могли отправить запрос на ваш "секретный" URL, после чего сервер корректно завершит работу.

Я бы выбрал быстрое решение RMI.

netstat -a

чтобы найти pid процесса, у которого открыт порт (при условии, что вы знаете порт), и

kill -9 $pid

чтобы остановить этот процесс.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top