|
|
@@ -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);
|