我正在编写一个Java websocket客户端,需要知道自己的IP地址,这意味着用于连接服务器端点的接口的IP地址。
由于客户端可能会更改地址,因此无论何时(重新)连接到服务器,都必须更新本地地址。使用Jetty的客户端很容易实现这一点,因为它的Session类具有getLocalAddress()方法。
另一方面,Tyrus的session class 缺乏此能力。一个简单的解决方法是使用普通的旧套接字。每当调用客户端的onOpen
时,我只需打开一个到服务器的常规TCP套接字,获取套接字的本地地址,然后关闭它。但这很浪费且容易出错,所以我更倾向于挖掘Tyrus并从其套接字中获取本地地址。有没有办法做到这一点?
答案 0 :(得分:2)
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
的WriteConf
甚至不会单独跟踪此信息以包含在JSR356图层中。