Преглед на файлове

Merge remote-tracking branch 'origin/sit' into sit

刘云鑫 преди 12 часа
родител
ревизия
a983f9ab03

+ 16 - 1
alien-lawyer/src/main/java/shop/alien/lawyer/config/WebSocketProcess.java

@@ -22,6 +22,8 @@ import shop.alien.util.common.safe.TextReviewServiceEnum;
 import javax.websocket.*;
 import javax.websocket.server.PathParam;
 import javax.websocket.server.ServerEndpoint;
+import java.io.EOFException;
+import java.nio.channels.ClosedChannelException;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -190,13 +192,26 @@ public class WebSocketProcess implements ApplicationContextAware {
         }
     }
 
+    private static boolean isBenignSocketDisconnect(Throwable error) {
+        for (Throwable t = error; t != null; t = t.getCause()) {
+            if (t instanceof EOFException || t instanceof ClosedChannelException) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     /**
      * 连接发生异常时候触发
      */
     @OnError
     public void onError(@PathParam("sendId") String id, Throwable error) {
         try {
-            log.error("WebSocketProcess.onError() Error,id={}, Msg=", id, error);
+            if (isBenignSocketDisconnect(error)) {
+                log.warn("WebSocketProcess.onError() 连接已关闭或读流结束(可忽略), id={}, summary={}", id, error.toString());
+            } else {
+                log.error("WebSocketProcess.onError() Error,id={}, Msg=", id, error);
+            }
             // 发生错误时主动移除,防止僵尸连接
             concurrentHashMap.remove(id, this);
         } catch (Exception e) {

+ 16 - 1
alien-store/src/main/java/shop/alien/store/config/WebSocketProcess.java

@@ -30,6 +30,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import javax.websocket.*;
 import javax.websocket.server.PathParam;
 import javax.websocket.server.ServerEndpoint;
+import java.io.EOFException;
+import java.nio.channels.ClosedChannelException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -256,13 +258,26 @@ public class WebSocketProcess implements ApplicationContextAware {
         }
     }
 
+    private static boolean isBenignSocketDisconnect(Throwable error) {
+        for (Throwable t = error; t != null; t = t.getCause()) {
+            if (t instanceof EOFException || t instanceof ClosedChannelException) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     /**
      * 连接发生异常时候触发
      */
     @OnError
     public void onError(@PathParam("sendId") String id, Throwable error) {
         try {
-            log.error("WebSocketProcess.onError() Error,id={}, Msg=", id, error);
+            if (isBenignSocketDisconnect(error)) {
+                log.warn("WebSocketProcess.onError() 连接已关闭或读流结束(可忽略), id={}, summary={}", id, error.toString());
+            } else {
+                log.error("WebSocketProcess.onError() Error,id={}, Msg=", id, error);
+            }
             // 发生错误时主动移除,防止僵尸连接
             concurrentHashMap.remove(id, this);
             connectionInfoMap.remove(id);