2015-11-02 4 views
0

У меня есть два приложения, которые должны взаимодействовать друг с другом с помощью HTTP. Каждый из них в настоящее время является сервером, использующим класс HttpServer, и делает запросы с использованием Apaches HTTP client library.Как отправить запрос HTTP Java с помощью конкретного порта номер

Одним из приложений будет иметь знание других адресов портов, прежде чем он работает, например, порт 8000 означает, что он использует это, чтобы сделать запрос HTTP-запроса, который может обрабатываться другим приложением. Однако, если второе приложение хочет отправить запрос первому приложению, он не будет знать, к какому порту следует отправлять ответ. Это происходит потому, что первое приложение отправит запрос с использованием клиентской библиотеки HTTP, которая будет динамически выбирать порт, например. порт 6543, то есть второе приложение не может его сохранить и использовать позже.

Пример:

приложение 1 нагрузки на локальном хосте с портом 8000.

App 2 нагрузки на локальном хосте с портом 8050.

приложение 1 знает, что приложение 2 находится на 8050 и посылает запрос, который получает обрабатываются приложением 2.

App 2 хочет послать запрос к приложению 1, но он не знает свой порт, поскольку ранее запрос был отправлен с использованием динамически назначенный порт.

Есть в любом случае вокруг этой ситуации, кроме первого приложения посылающего его номер порта сервера для приложения?

ответ

1

Я не уверен, что именно вы пытаетесь сделать. Если клиент отправляет HTTP-запрос, он может действительно прочитать ответ от того же соединения, почему вы хотите отправить его через другое соединение и создать накладные расходы. Если вы хотите достичь этого, то нет никакого способа, кроме того, что клиентские серверы обмениваются информацией о порте для ответа на запрос и оба они действуют как клиент + сервер. Эта информация может быть обменена с использованием HTTP-заголовка в запросах.

Я считаю, что вы здесь путать с TCP и HTTP портов.

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

Ваш сервер не просто выбирает динамический порт для отправки ответа, он является базовым TCP-портом, используемым для отправки ответа. Обычно TCP является основным транспортным протоколом, используемым с протоколом HTTP. Клиенты TCP отправляют заголовок, называемый «клиентский порт», чтобы сообщить серверу, на котором они хотят получить ответ. Эти номера портов выбираются случайным образом из диапазона бесплатных портов клиентами.

+0

Пример сценарий является то, что приложение 1 начинается с сервером на локальном хост, работающий на порт 8000. App 2 начинается с сервером на локальном хосте с портом 8050. App 1 знает приложение 2s порт так отправляет его с помощью клиента HTTP на локальный хост: 8000, которое приложение 2 получает, однако, когда оно затем пытается отправить HTTP-запрос в приложение 1 позже, он не знает, что работает порт сервера приложений 1s. – Tom

+0

@TomWilkins Почему app1 не может добавить HTTP-заголовок в свой запрос, говорящий о его слушающем порту? –

+0

На самом деле вы правы, я могу просто добавить его как HTTP-заголовок ..... всегда смотрите на простые решения:/(Хотите ответить «добавьте HTTP-заголовок в приложение 1, чтобы приложение 2 могло его использовать» или что-то, поэтому я могу отметить.) – Tom

Смежные вопросы