與SO rules一致,我在這裏回答我自己的問題。
我得到了我的線索,當我試圖把它轉換爲TyrusSession
和Jetty抱怨(引發ClassCastException
)在錯誤日誌中稱這是JsrSession
不能被鑄造成TyrusSession
。不過,我剛剛打印的Session
對象在我的日誌,這樣的事情出現了:
session: WebSocketSession[....]
然後我試着將它轉換爲org.eclipse.jetty.websocket.common.WebSocketSession
然後抱怨實際上是一個JsrSession
,然後導致了對象我發現以下解決方案:
@ServerEndpoint (value="/mySillyApp", configurator= ..., decoders={...})
public class MySillyWebSocketServer
{
@OnOpen
public void open (Session session, EndpointConfig config)
{
JsrSession jsrSession = (JsrSession) session; // import org.eclipse.jetty.websocket.jsr356.JsrSession;
WebSocketSession webSocketSession = jsrSession.getWebSocketSession(); // import org.eclipse.jetty.websocket.common.WebSocketSession;
String clientIPAddressString = webSocketSession.getRemoteAddress().getHostString();
....
}
...
}
顯然,您將不得不在相應的類路徑中包含相應的jar。對於gradle這個,你在dependencies {...}
部分做到這一點:
compile 'org.eclipse.jetty.websocket:javax-websocket-client-impl:9.3.6.v20151106'
compile 'org.eclipse.jetty.websocket:websocket-common:9.1.0.v20131115'
希望我的方法和細節可以幫助別人。