Привязка разных обработчиков HttpHandler Grizzly к разным NetworkListeners

В документации Grizzly указано, что

все HttpHandlers, добавленные в ServerConfiguration, будут общими для всех слушателей.

Есть ли другой способ привязки разных обработчиков к разным портам? Или мне придется многократно создавать экземпляр HttpServer?


person hertzsprung    schedule 08.02.2013    source источник


Ответы (1)


Вы можете привязать его к PortRange, то есть к нескольким портам.

NetworkListener(String name, String host, PortRange portRange) задокументировано

or

HttpServer httpServer = new HttpServer();

NetworkListener networkListener1 = new NetworkListener("sample-listener1", "localhost", 8888);
NetworkListener networkListener2 = new NetworkListener("sample-listener2", "localhost", 8889);
httpServer.addListener(networkListener1);
httpServer.addListener(networkListener2);

Таким образом, вы можете добавить несколько обработчиков для разных портов.

или (не пробовал, но, скорее всего, работает)

HttpServer server = HttpServer.createSimpleServer();
 server.getServerConfiguration().addHttpHandler(handler1);
 server.getServerConfiguration().addHttpHandler(handler2);
server.start()
person TheWhiteRabbit    schedule 08.02.2013
comment
Но я хочу, чтобы разные обработчики были привязаны к разным портам. Использование PortRange просто привязало бы один и тот же обработчик ко всем портам, не так ли? - person hertzsprung; 08.02.2013
comment
Не могли бы вы включить HttpHandlers в свой пример? Я хочу, чтобы GET http://localhost:1234/ вызывал один обработчик, GET http://localhost:5678/ — другой. - person hertzsprung; 08.02.2013
comment
Речь идет об обслуживании разного контента с использованием разных обработчиков для разных портов. - person hertzsprung; 08.02.2013
comment
на экземпляр httpsserver будет присутствовать только один HttpHandler, в этом случае вам нужно несколько экземпляров HTTPServer экземпляров - person TheWhiteRabbit; 08.02.2013
comment
Хорошо, я так и подозревал. Если вы хотите отредактировать свой ответ, я приму :-) - person hertzsprung; 08.02.2013
comment
извините за предыдущий комментарий, кажется, это может сработать, см. редактирование. - person TheWhiteRabbit; 08.02.2013
comment
На самом деле документация PortRange немного вводит в заблуждение. Он привязывается не ко всем портам в пределах диапазона, а к случайному свободному порту (выполняя несколько попыток привязки, чтобы найти свободный порт, если это необходимо). - person pingw33n; 28.11.2014