Commit 85a6b6c0 authored by 水玉婷's avatar 水玉婷
Browse files

feat:重连机制

parent 12632982
......@@ -118,10 +118,7 @@ export class SSEService {
this.closeSSE();
// 检测服务器不可用情况
const isServerUnavailable = error &&
(error.type === 'error' ||
(error.target && error.target.readyState === 0) ||
(error.message && error.message.includes('CONNECTION_REFUSED')));
const isServerUnavailable = this.isServerUnavailableError(error);
if (isServerUnavailable) {
console.error('⛔ 服务器不可用,停止重连');
......@@ -231,26 +228,50 @@ export class SSEService {
// 判断是否为服务器不可用错误
private isServerUnavailableError(error: any): boolean {
// 检查错误类型和消息,判断是否为真正的服务器不可用
const errorMessage = error?.message || '';
const errorType = error?.type || '';
if (!error) return false;
// 服务器不可用的典型特征:
// 检查错误消息
const errorMessage = String(error.message || '').toLowerCase();
const errorString = String(error).toLowerCase();
// 检查错误目标的状态
const errorTarget = error.target || error;
const readyState = errorTarget.readyState;
// 服务器不可用的明确特征:
// 1. 连接被拒绝 (net::ERR_CONNECTION_REFUSED)
// 2. 服务器返回5xx错误
// 3. 连接超时但网络正常
const isConnectionRefused = errorMessage.includes('CONNECTION_REFUSED') ||
// 3. 明确的连接失败消息
const isConnectionRefused = errorMessage.includes('connection_refused') ||
errorMessage.includes('connection refused') ||
errorMessage.includes('Failed to fetch');
errorMessage.includes('failed to fetch') ||
errorString.includes('connection_refused') ||
errorString.includes('connection refused');
const isServerError = errorMessage.includes('500') ||
errorMessage.includes('502') ||
errorMessage.includes('503') ||
errorMessage.includes('504');
errorMessage.includes('504') ||
errorString.includes('500') ||
errorString.includes('502') ||
errorString.includes('503') ||
errorString.includes('504');
// 只有当明确是服务器不可用时才停止重连
// 避免将正常的网络波动误判为服务器不可用
return isConnectionRefused || isServerError;
const isUnavailable = isConnectionRefused || isServerError;
if (isUnavailable) {
console.log('🔍 检测到服务器不可用错误:', {
message: errorMessage,
string: errorString,
readyState: readyState,
isConnectionRefused,
isServerError
});
}
return isUnavailable;
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment