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

feat:重连机制

parent 12632982
...@@ -118,10 +118,7 @@ export class SSEService { ...@@ -118,10 +118,7 @@ export class SSEService {
this.closeSSE(); this.closeSSE();
// 检测服务器不可用情况 // 检测服务器不可用情况
const isServerUnavailable = error && const isServerUnavailable = this.isServerUnavailableError(error);
(error.type === 'error' ||
(error.target && error.target.readyState === 0) ||
(error.message && error.message.includes('CONNECTION_REFUSED')));
if (isServerUnavailable) { if (isServerUnavailable) {
console.error('⛔ 服务器不可用,停止重连'); console.error('⛔ 服务器不可用,停止重连');
...@@ -231,26 +228,50 @@ export class SSEService { ...@@ -231,26 +228,50 @@ export class SSEService {
// 判断是否为服务器不可用错误 // 判断是否为服务器不可用错误
private isServerUnavailableError(error: any): boolean { private isServerUnavailableError(error: any): boolean {
// 检查错误类型和消息,判断是否为真正的服务器不可用 if (!error) return false;
const errorMessage = error?.message || '';
const errorType = error?.type || '';
// 服务器不可用的典型特征: // 检查错误消息
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) // 1. 连接被拒绝 (net::ERR_CONNECTION_REFUSED)
// 2. 服务器返回5xx错误 // 2. 服务器返回5xx错误
// 3. 连接超时但网络正常 // 3. 明确的连接失败消息
const isConnectionRefused = errorMessage.includes('CONNECTION_REFUSED') || const isConnectionRefused = errorMessage.includes('connection_refused') ||
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') || const isServerError = errorMessage.includes('500') ||
errorMessage.includes('502') || errorMessage.includes('502') ||
errorMessage.includes('503') || 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