feat: 增加信令自动重连保活与控制端视频录制
- 信令客户端增加心跳保活与指数退避自动重连机制 - 服务端优化传输异常日志级别,客户端断开不再报错 - 被控端信令断开时保持服务运行并自动重连 - Flutter 控制端增加远程视频录制功能,兼容标准 WebRTC 模式切换 - 各端连接按钮增加“连接中”状态防重复点击
This commit is contained in:
@@ -123,11 +123,24 @@ public class SignalWebSocketHandler extends TextWebSocketHandler {
|
||||
|
||||
@Override
|
||||
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
|
||||
logger.error("Transport error on session {}: {}", session.getId(), exception.getMessage());
|
||||
// EOFException / 连接被对端重置 属于正常网络事件(客户端网络中断、代理空闲超时等),
|
||||
// 并非服务器错误,降级为 DEBUG 记录,避免误导。
|
||||
boolean benign = exception instanceof java.io.EOFException
|
||||
|| (exception.getMessage() != null
|
||||
&& (exception.getMessage().contains("Connection reset")
|
||||
|| exception.getMessage().contains("Broken pipe")
|
||||
|| exception.getMessage().contains("An established connection")));
|
||||
if (benign) {
|
||||
logger.debug("Transport closed (client disconnected) on session {}: {}",
|
||||
session.getId(), exception.getMessage());
|
||||
} else {
|
||||
logger.warn("Transport error on session {}: {}", session.getId(), exception.getMessage());
|
||||
}
|
||||
sessionManager.unregisterSession(session);
|
||||
metrics.recordSessionCount(sessionManager.getOnlineCount());
|
||||
// 连接已不可用时无需再以 SERVER_ERROR(1011) 关闭;仅在仍打开时温和关闭。
|
||||
if (session.isOpen()) {
|
||||
session.close(CloseStatus.SERVER_ERROR);
|
||||
session.close(CloseStatus.GOING_AWAY);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user