0

我正在编写一个 Java websocket 客户端,它需要知道自己的 IP 地址,这意味着用于连接到服务器端点的接口的 IP 地址

由于客户端可能会更改地址,因此无论何时(重新)连接到服务器,都必须更新本地地址。这很容易使用 Jetty 的客户端实现,因为它的Session类有一个getLocalAddress()方法。

而泰鲁斯的会话班缺乏这种能力。一个简单的解决方法是使用普通的旧套接字。每当onOpen调用客户端时,我只需打开一个到服务器的常规 TCP 套接字,获取套接字的本地地址,然后关闭它。但这很浪费而且容易出错,所以我更愿意深入研究 Tyrus 并从它的套接字中获取本地地址。有没有办法做到这一点?

4

1 回答 1

2

Tyrus 是 JSR356 ( javax.websocket) 的实现,因此,此级别的信息不可用。

Jetty 比 JSR356 和 Tyrus 早了大约 3 年,并且从 WebSocket 学到了很多关于人们需要什么的知识。

您必须等到 2.0 版javax.websocket并祈祷它添加此级别的信息,然后才能使用它。

注意:目前没有针对javax.websocket2.0 的计划或努力,JSR 的专家组已经闲置一年多了。

您不太可能从 Tyrus 获得此信息,因为它依赖于javax.servlet.http.HttpServletRequest.upgrade()哪个使用 a javax.servlet.http.HttpUpgradeHandler,它 javax.servlet.http.WebConnection由容器传递给 a 。这两个对象都没有暴露连接信息。

Tyrus 的实现甚至不javax.servlet.http.HttpUpgradeHandler单独跟踪这些信息以包含在 JSR356 层中。

于 2016-01-05T18:37:22.153 回答