diff --git a/src/org/redkale/net/http/WebSocket.java b/src/org/redkale/net/http/WebSocket.java index b1c332e5d..6fa758218 100644 --- a/src/org/redkale/net/http/WebSocket.java +++ b/src/org/redkale/net/http/WebSocket.java @@ -754,11 +754,10 @@ public abstract class WebSocket { } /** - * 当Single模式下用户重复登陆时回调函数, 默认处理逻辑:关闭之前的WebSocket连接 + * 当Single模式下用户重复登陆时回调函数,调用完之后关闭之前的WebSocket连接 * */ public void onSingleRepeatConnect() { - this._engine.node.forceCloseWebSocket(getUserid()); } /** diff --git a/src/org/redkale/net/http/WebSocketServlet.java b/src/org/redkale/net/http/WebSocketServlet.java index b7e21463e..5a8f11feb 100644 --- a/src/org/redkale/net/http/WebSocketServlet.java +++ b/src/org/redkale/net/http/WebSocketServlet.java @@ -241,12 +241,22 @@ public abstract class WebSocketServlet extends HttpServlet implements Resourcabl webSocket._userid = userid; if (single && !anyuser) { WebSocketServlet.this.node.existsWebSocket(userid).whenComplete((rs, nex) -> { - if (rs) webSocket.onSingleRepeatConnect(); - WebSocketServlet.this.node.localEngine.add(webSocket); - WebSocketRunner runner = new WebSocketRunner(context, webSocket, restMessageConsumer, response.removeChannel()); - webSocket._runner = runner; - context.runAsync(runner); - response.finish(true); + if (rs) { + webSocket.onSingleRepeatConnect(); + webSocket.forceCloseWebSocket(userid).whenComplete((fr, fex) -> { + WebSocketServlet.this.node.localEngine.add(webSocket); + WebSocketRunner runner = new WebSocketRunner(context, webSocket, restMessageConsumer, response.removeChannel()); + webSocket._runner = runner; + context.runAsync(runner); + response.finish(true); + }); + } else { + WebSocketServlet.this.node.localEngine.add(webSocket); + WebSocketRunner runner = new WebSocketRunner(context, webSocket, restMessageConsumer, response.removeChannel()); + webSocket._runner = runner; + context.runAsync(runner); + response.finish(true); + } }); } else { WebSocketServlet.this.node.localEngine.add(webSocket);