我正在编写一个Java Websocket客户端,该客户端需要知道其自己的IP地址,即用于连接到服务器端点的接口的IP地址。
由于客户端可能会更改地址,因此每当它们(重新)连接到服务器时,都必须更新本地地址。使用Jetty的客户端可以轻松实现此目的,因为其Session类具有getLocalAddress()方法。
另一方面,Tyrus的session class缺少此功能。一个简单的解决方法是使用普通的旧套接字。每当调用客户端的onOpen
时,我只要打开服务器的常规TCP套接字,获取套接字的本地地址,然后将其关闭即可。但这很浪费而且容易出错,所以我宁愿深入研究Tyrus并从其套接字获取本地地址。有办法吗?
最佳答案
Tyrus是JSR356(javax.websocket
)的实现,因此,此信息级别不可用。
Jetty比JSR356和Tyrus早了大约3年,并且已经从WebSocket中学到了很多人们需要的东西。
您必须等到javax.websocket
的2.0版,并祈祷它可以添加此级别的信息,然后您才希望使用它。
注意:javax.websocket
2.0目前没有任何计划或工作正在进行,JSR的专家组已经有超过一年的历史了。
您极不可能从Tyrus获得此信息,因为它依赖于使用javax.servlet.http.HttpServletRequest.upgrade()
的javax.servlet.http.HttpUpgradeHandler
,该javax.servlet.http.WebConnection
由容器传递给Tyrus implementation。这两个对象都没有公开连接信息。javax.servlet.http.HttpUpgradeHandler
的甚至没有单独跟踪此信息以包含在JSR356层中。