feat: 添加存储WebSocket基础路径支持,更新环境配置和WebSocket服务以处理新路径

This commit is contained in:
xudan 2025-07-18 15:03:35 +08:00
parent 7145cb2786
commit 107ef11106
5 changed files with 34 additions and 12 deletions

3
.env
View File

@ -1,3 +1,4 @@
ENV_APP_TITLE=运输控制系统
ENV_HTTP_BASE=/api
ENV_WEBSOCKET_BASE=/ws
ENV_WEBSOCKET_BASE=/ws
ENV_STORAGE_WEBSOCKET_BASE=/vwedWs

View File

@ -1,6 +1,7 @@
ENV_APP_TITLE=运输控制系统(开发)
# ENV_HTTP_BASE=/mocks
ENV_WEBSOCKET_BASE=/ws
ENV_STORAGE_WEBSOCKET_BASE=/vwedWs
# 开发环境token配置 - 可以手动设置或从另一个项目获取后填入
ENV_DEV_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3NTAzMzkwMTcsInVzZXJuYW1lIjoiYWRtaW4ifQ.uGWMIPH9-sdyEwr0bQBMKQSTAjYBZhlIVDRHGtheENE

View File

@ -1,3 +1,4 @@
ENV_APP_TITLE=大众一汽发动机AMR调度系统
ENV_HTTP_BASE=/jeecg-boot/
ENV_WEBSOCKET_BASE=/ws
ENV_STORAGE_WEBSOCKET_BASE=/vwedWs

View File

@ -119,7 +119,9 @@ class EnhancedWebSocket {
if (isHeartbeatResponse) {
this.heartbeatReceivedCount++;
const responseTime = Date.now() - this.lastHeartbeatTime;
console.log(`💗 收到心跳响应: ${this.path}, 响应时间: ${responseTime}ms, 已发送: ${this.heartbeatSentCount}, 已接收: ${this.heartbeatReceivedCount}`);
console.log(
`💗 收到心跳响应: ${this.path}, 响应时间: ${responseTime}ms, 已发送: ${this.heartbeatSentCount}, 已接收: ${this.heartbeatReceivedCount}`,
);
// 心跳响应,不传递给业务代码
return;
}
@ -133,17 +135,17 @@ class EnhancedWebSocket {
this.ws.onclose = (event) => {
const connectionDuration = Date.now() - this.connectionStartTime;
const closeReason = getCloseReasonDescription(event.code, event.reason);
console.log(`❌ WebSocket连接关闭: ${this.path}`);
console.log(` └─ 关闭原因: ${closeReason}`);
console.log(` └─ 连接持续时间: ${connectionDuration}ms`);
console.log(` └─ 心跳统计: 发送${this.heartbeatSentCount}次, 接收${this.heartbeatReceivedCount}`);
console.log(` └─ 是否手动关闭: ${this.isManualClose}`);
console.log(` └─ 是否心跳超时: ${this.isHeartbeatTimeout}`);
// 分析断连原因
this.analyzeDisconnectionReason(event.code, event.reason);
this.stopHeartbeat();
// 先调用业务代码的关闭处理
@ -178,7 +180,7 @@ class EnhancedWebSocket {
if (reason) {
console.log(` └─ 服务器提供的关闭原因: ${reason}`);
}
switch (code) {
case 1000:
console.log(' └─ 正常关闭,可能是服务器主动关闭或客户端主动关闭');
@ -222,11 +224,16 @@ class EnhancedWebSocket {
// 获取连接状态文本
private getReadyStateText(): string {
switch (this.ws.readyState) {
case WebSocket.CONNECTING: return 'CONNECTING(0)';
case WebSocket.OPEN: return 'OPEN(1)';
case WebSocket.CLOSING: return 'CLOSING(2)';
case WebSocket.CLOSED: return 'CLOSED(3)';
default: return `UNKNOWN(${this.ws.readyState})`;
case WebSocket.CONNECTING:
return 'CONNECTING(0)';
case WebSocket.OPEN:
return 'OPEN(1)';
case WebSocket.CLOSING:
return 'CLOSING(2)';
case WebSocket.CLOSED:
return 'CLOSED(3)';
default:
return `UNKNOWN(${this.ws.readyState})`;
}
}
@ -434,7 +441,13 @@ class EnhancedWebSocket {
}
function create(path: string): Promise<WebSocket> {
const baseUrl = import.meta.env.ENV_WEBSOCKET_BASE ?? '';
let baseUrl = '';
if (path.includes(import.meta.env.ENV_STORAGE_WEBSOCKET_BASE)) {
baseUrl = '';
} else {
baseUrl = import.meta.env.ENV_WEBSOCKET_BASE ?? '';
}
const ws = new EnhancedWebSocket(path, baseUrl) as WebSocket;
return new Promise((resolve, reject) => {

View File

@ -56,6 +56,12 @@ export default ({ mode }: Record<string, unknown>) =>
changeOrigin: true,
ws: true,
},
'/vwedWs/': {
target: 'ws://192.168.189.206:8000/',
rewrite: (path) => path.replace(/^\/vwedWs/, ''),
changeOrigin: true,
ws: true,
},
},
},
});