如何从Tyrus websocket客户端

时间:2016-01-05 18:31:27

标签: java sockets websocket jetty tyrus

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

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

另一方面,Tyrus的session class 缺乏此能力。一个简单的解决方法是使用普通的旧套接字。每当调用客户端的onOpen时,我只需打开一个到服务器的常规TCP套接字,获取套接字的本地地址,然后关闭它。但这很浪费且容易出错,所以我更倾向于挖掘Tyrus并从其套接字中获取本地地址。有没有办法做到这一点?

1 个答案:

答案 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.HttpUpgradeHandlerjavax.servlet.http.WebConnection由容器传递Tyrus implementation。这两个对象都没有暴露连接信息。

javax.servlet.http.HttpUpgradeHandlerWriteConf甚至不会单独跟踪此信息以包含在JSR356图层中。