[英]Spring websocket stomp client how to capture the connection is lost?
我使用spring websocket踩踏客户端。 下面是一个代码片段:
List<Transport> transports = new ArrayList<Transport>(2);
transports.add(new WebSocketTransport(new StandardWebSocketClient()));
transports.add(new RestTemplateXhrTransport());
WebSocketHttpHeaders headers = new WebSocketHttpHeaders();
headers.add("Cookie", client.getCookieString());
SockJsClient sockJsClient = new SockJsClient(transports);
WebSocketStompClient stompClient = new WebSocketStompClient(sockJsClient);
stompClient.setMessageConverter(new StringMessageConverter());
ListenableFuture<StompSession> future =
stompClient.connect(configuration.getApp().getWebsocketServerBase() + "/websocket/sa", headers, new MyWebSocketHandler());
future.addCallback(new SuccessCallback<StompSession>() {
public void onSuccess(StompSession stompSession) {
System.out.println("on Success!");
}
}, new FailureCallback() {
public void onFailure(Throwable throwable) {
System.out.println("on Failure!");
}
});
它可以工作,但是当websocket服务器关闭时,客户端不会收到该消息。
如何监听服务器关闭事件?
我找到了解决方案。
MyWebSocketHandler这样实现StompSessionHandler:
private class MyWebSocketHandler implements StompSessionHandler {
@Override
public void afterConnected(StompSession stompSession, StompHeaders stompHeaders) {
}
@Override
public void handleException(StompSession stompSession, StompCommand stompCommand, StompHeaders stompHeaders, byte[] bytes, Throwable throwable) {
}
@Override
public void handleTransportError(StompSession stompSession, Throwable throwable) {
if (throwable instanceof ConnectionLostException) {
// if connection lost, call this
}
}
@Override
public Type getPayloadType(StompHeaders stompHeaders) {
return null;
}
@Override
public void handleFrame(StompHeaders stompHeaders, Object o) {
}
}
您可以看到方法handleTransportError。 谢谢。
参考Spring WebSocket文档 25.4.13 STOMP客户端。
我认为您也可以捕获SessionDisconnectEvent :
SessionDisconnectEvent
—在STOMP会话结束时发布。 DISCONNECT可能已经从客户端发送,或者在关闭WebSocket会话时也可能自动生成。 在某些情况下,每个会话可能多次发布此事件。 关于多个断开事件,组件应该是幂等的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.