如何从 Tyrus websocket 客户端获取本地 ip 地址
How to get the local ip address from a Tyrus websocket client
我正在编写一个 Java websocket 客户端,它需要知道自己的 IP 地址,这意味着 用于连接到服务器端点的接口的 IP 地址 .
由于客户端可能会更改地址,因此无论何时(重新)连接到服务器,都必须更新本地地址。这很容易使用 Jetty 的客户端实现,因为它的 Session class has a getLocalAddress() 方法。
Tyrus 的 session class 另一方面 没有这个能力 。一个简单的解决方法是使用普通的旧套接字。每当调用客户端的 onOpen
时,我只是打开一个到服务器的常规 TCP 套接字,获取套接字的本地地址,然后关闭它。但这是浪费且容易出错,所以我宁愿深入研究 Tyrus 并从其套接字获取本地地址。有办法吗?
Tyrus 是 JSR356 (javax.websocket
) 的一个实现,因此,该级别的信息不可用。
Jetty pre-dates JSR356 和 Tyrus 大约 3 年,从 WebSocket 中学到了很多关于人们需要什么的知识。
你必须等到 javax.websocket
的 2.0 版,并祈祷它添加了这一级别的信息,然后你才能希望使用它。
Note: there's currently no plans or efforts underway for javax.websocket
2.0, the expert-group at the JSR has been inactive for over a year now.
您不太可能从 Tyrus 获得此信息,因为它依赖于容器的 javax.servlet.http.HttpServletRequest.upgrade()
which uses a javax.servlet.http.HttpUpgradeHandler
, which is handed a javax.servlet.http.WebConnection
。这两个对象都没有公开连接信息。
Tyrus implementation of javax.servlet.http.HttpUpgradeHandler
甚至没有单独跟踪此信息以包含在 JSR356 层中。
我正在编写一个 Java websocket 客户端,它需要知道自己的 IP 地址,这意味着 用于连接到服务器端点的接口的 IP 地址 .
由于客户端可能会更改地址,因此无论何时(重新)连接到服务器,都必须更新本地地址。这很容易使用 Jetty 的客户端实现,因为它的 Session class has a getLocalAddress() 方法。
Tyrus 的 session class 另一方面 没有这个能力 。一个简单的解决方法是使用普通的旧套接字。每当调用客户端的 onOpen
时,我只是打开一个到服务器的常规 TCP 套接字,获取套接字的本地地址,然后关闭它。但这是浪费且容易出错,所以我宁愿深入研究 Tyrus 并从其套接字获取本地地址。有办法吗?
Tyrus 是 JSR356 (javax.websocket
) 的一个实现,因此,该级别的信息不可用。
Jetty pre-dates JSR356 和 Tyrus 大约 3 年,从 WebSocket 中学到了很多关于人们需要什么的知识。
你必须等到 javax.websocket
的 2.0 版,并祈祷它添加了这一级别的信息,然后你才能希望使用它。
Note: there's currently no plans or efforts underway for
javax.websocket
2.0, the expert-group at the JSR has been inactive for over a year now.
您不太可能从 Tyrus 获得此信息,因为它依赖于容器的 javax.servlet.http.HttpServletRequest.upgrade()
which uses a javax.servlet.http.HttpUpgradeHandler
, which is handed a javax.servlet.http.WebConnection
。这两个对象都没有公开连接信息。
Tyrus implementation of javax.servlet.http.HttpUpgradeHandler
甚至没有单独跟踪此信息以包含在 JSR356 层中。