2016-01-05 3 views
0

Я пишу клиент веб-сервера Java, который должен знать свой собственный IP-адрес, что означает IP-адрес интерфейса, используемого для подключения к конечной точке сервера. ,Как получить локальный IP-адрес от клиента веб-камеры Tyrus

Поскольку клиенты могут менять адреса, при каждом подключении к серверу локальный адрес должен быть обновлен. Это легко достигается с помощью клиента Jetty, так как его класс Session имеет метод getLocalAddress().

Tyrus's session class с другой стороны не хватает. Простым обходным путем для этого будет использование простого старого сокета. Всякий раз, когда вызываемый клиент onOpen, я просто открываю обычный TCP-сокет на сервер, получаю локальный адрес сокета и закрываю его. Но это расточительно и подвержено ошибкам, поэтому я бы скорее заглянул в Тирус и получил локальный адрес из его сокета. Есть ли способ сделать это?

ответ

2

Tyrus - это реализация JSR356 (javax.websocket), и этот уровень информации недоступен.

Требования к дате JSR356 и Tyrus примерно 3 года и многому научились о том, что нужно людям из WebSocket.

Вам нужно подождать до версии 2.0 от javax.websocket и молиться, чтобы он добавил этот уровень информации, прежде чем вы сможете надеяться использовать его.

Примечание: нет в настоящее время нет планов или прилагаются усилия для javax.websocket 2.0, эксперт-группа в JSR теперь были неактивны в течение года.

Это очень маловероятно, что вы будете иметь возможность получить эту информацию из Тира, как это полагается на javax.servlet.http.HttpServletRequest.upgrade() который использует javax.servlet.http.HttpUpgradeHandler, который передал javax.servlet.http.WebConnection контейнер. Ни один из этих двух объектов не имеет информации о соединении.

Tyrus implementation из javax.servlet.http.HttpUpgradeHandler даже не отследит эту информацию отдельно, чтобы включить ее в слой JSR356.

+0

Спасибо. Это хорошее объяснение * почему * это так, но мой вопрос вращается вокруг «* how *». Есть ли какие-либо другие обходные пути, которые вы можете предложить, помимо открытия обычного второго сокета? Может быть, копать вокруг внутренних органов Тира, используя отражение? – Malt

+0

Спецификация JSR356 действительно разработана только для самых наивных и упрощенных случаев использования веб-памяти. Ваши требования уже превышают эту область. –