0

サーバーエンドポイントへの接続に使用されるインターフェースの IP アドレスを意味する、独自の IP アドレスを認識する必要がある Java Websocket クライアントを作成しています。

クライアントはアドレスを変更する可能性があるため、サーバーに (再) 接続するたびに、ローカル アドレスを更新する必要があります。SessionクラスにはgetLocalAddress()メソッドがあるため、これは Jetty のクライアントを使用して簡単に実現できます。

一方、Tyrus のセッション クラスには、この機能がありません。これに対する簡単な回避策は、単純な古いソケットを使用することです。クライアントが呼び出されるたびonOpenに、サーバーへの通常の TCP ソケットを開き、ソケットのローカル アドレスを取得してから閉じます。しかし、それは無駄でエラーが発生しやすいので、むしろ Tyrus を掘り下げてソケットからローカル アドレスを取得したいと思います。それを行う方法はありますか?

4

1 に答える 1

2

Tyrus は JSR356 ( javax.websocket) の実装であるため、このレベルの情報は利用できません。

Jetty は JSR356 と Tyrus よりも約 3 年前から存在し、人々が WebSocket から何を必要としているのかについて多くのことを学びました。

のバージョン 2.0 まで待って、javax.websocketこのレベルの情報が追加されることを祈る必要があります。

注: 現在、javax.websocket2.0 の計画や取り組みは行われておらず、JSR の専門家グループは 1 年以上活動を休止しています。

Tyrus からこの情報を取得できる可能性はほとんどありません。コンテナによって渡される javax.servlet.http.HttpServletRequest.upgrade()を使用するに依存しているためです。これら 2 つのオブジェクトのいずれも、接続情報が公開されていません。javax.servlet.http.HttpUpgradeHandlerjavax.servlet.http.WebConnection

Tyrus 実装javax.servlet.http.HttpUpgradeHandlerは、この情報を個別に追跡して JSR356 レイヤーに含めることさえしません。

于 2016-01-05T18:37:22.153 に答える