Резервирование номера порта в Java - PullRequest
1 голос
/ 23 декабря 2011

Когда я запускаю ActiveMQ, выполняя пакетный файл в его каталоге bin /, я могу перейти к его консоли администратора / управления, открыв веб-браузер и перейдя к http://localhost:8161/admin/.

Это меняcurious.

Это моя локальная песочница, и у меня не установлен ни один веб-сервер (httpd или другой).Так как же ActiveMQ может «зарегистрировать» порт на моей машине и слушать его исключительно?

Если я пытаюсь перейти на http://localhost:8162/admin/ (обратите внимание на другой порт #), я получаю невозможно подключиться ошибка.

Где-то, каким-то образом, AMQ говорит "сопоставить этот URI (localhost:8161) с каким-либо корневым каталогом на этом компьютере".Как программист, меня интересует, как что-то подобное работает.

Ответы [ 5 ]

3 голосов
/ 23 декабря 2011

Java-процесс может использовать любой порт (> = 1024 в Linux) в качестве веб-сервера или для любых других целей. Вам не нужен отдельный веб-сервер для этого

1 голос
/ 23 декабря 2011

Я предлагаю вам прочитать на сокетах: здесь .Весь веб-сервер, является слушателем сокета, который обрабатывает протокол HTTP.Протокол HTTP здесь здесь .Веб-серверы часто обрабатывают много других вещей, но это основа.Если вам нужна небольшая программа, которая также работает на веб-сервере, советую не изобретать велосипед.Попробуйте включить jetty в ваш сервер.

1 голос
/ 23 декабря 2011

ActiveMQ запускает встроенный Jetty сервер , который прослушивает HTTP-соединения через этот порт. Вам не нужен другой работающий сервер. Это все сделано с Java. Если вы будете копать достаточно глубоко, вы найдете несколько вариантов ServerSocket внизу всего этого. Вы можете узнать все о сокетах и ​​прослушивании портов в Java Tutorial .

0 голосов
/ 23 декабря 2011

Один: этот порт больше (или равен) 1024, так что это означает, что «не root» пользователь может прослушивать его.

Второй: вы можете связывать порты только с выделенных адресов.Это означает, что ActiveMQ мог открыть этот порт только на 127.0.0.1 (localhost).Попробуйте и посмотрите, можете ли вы открыть этот URL с IP-адреса вашего внешнего интерфейса: скорее всего, вы не сможете.

Если вы работаете в системе Unix, вы можете проверить, какая программа прослушивает какой порт, используя netstat -ltpn.

Основной системный вызов для привязки к порту: listen(2).

0 голосов
/ 23 декабря 2011

На самом простом уровне ActiveMQ создает экземпляр ServerSocket внутри себя и прослушивает соединения, используя этот сокет сервера.Сокет всегда привязан к порту.

...