Browse Source

测试环境wss配置,解决刷新连接问题

LuTong 1 day ago
parent
commit
1ce917e0b0
1 changed files with 13 additions and 11 deletions
  1. 13 11
      src/utils/wsBase.ts

+ 13 - 11
src/utils/wsBase.ts

@@ -1,28 +1,30 @@
 /**
  * WebSocket 基础地址
- * - 优先使用 .env 中的 VITE_WS_BASE(若为 https 页面且配的是 ws://,会自动改为 wss + 当前 host
- * - 若当前页面为 HTTPS,强制使用 wss + 当前 host(走 Nginx 443),避免混合内容被拦截
- * - 若页面是 HTTP 且访问 IP/与 VITE_WS_BASE 中 wss 域名不一致,改用 ws://当前主机:8000(避免在 http://IP 下仍连 wss://其它域导致握手失败)
+ * - HTTPS:wss://当前页面 host/alienStore/socket(不写死域名/IP,UAT/生产/测试域名通用
+ * - HTTP:优先 VITE_WS_BASE;若 env 为异名 wss 则回退 ws://当前 hostname + VITE_WS_DIRECT_PORT(默认 8000)直连 store
+ * - 不配 env 的 HTTP:同上,用当前 hostname,避免写死某台 SIT IP
  */
 export function getWebSocketBase(): string {
   const envBase = (import.meta.env.VITE_WS_BASE as string | undefined)?.trim();
+  const directPort = String(import.meta.env.VITE_WS_DIRECT_PORT || "8000").replace(/^:/, "");
+
+  const httpDirectWs = (hostname: string) => `ws://${hostname}:${directPort}/alienStore/socket`;
+
   if (typeof window !== "undefined" && window.location) {
     const isHttps = window.location.protocol === "https:";
-    const host = window.location.host; // hostname + port(如 120.26.186.130 或 uat.ailien.shop)
-    // 页面是 HTTPS 时,必须用 wss,且用当前 host(不写死端口),由 Nginx 443 代理到后端
+    const host = window.location.host; // hostname + port(如 uat.ailien.shop)
     if (isHttps) {
       return `wss://${host}/alienStore/socket`;
     }
+    const locHost = window.location.hostname;
     if (envBase && envBase.trim()) {
       const e = envBase.replace(/\/$/, "");
-      const locHost = window.location.hostname;
       const isLocal = locHost === "localhost" || locHost === "127.0.0.1";
-      // 例如:浏览器打开 http://120.26.186.130/... 但 .env 写死 wss://test.ailien.shop → 跨域 wss 常失败;同机 store 多监听 8000
-      if (!isHttps && e.startsWith("wss://") && !isLocal) {
+      if (e.startsWith("wss://") && !isLocal) {
         try {
           const envHost = new URL(e.replace(/^wss:/, "https:")).hostname;
           if (envHost !== locHost) {
-            return `ws://${locHost}:8000/alienStore/socket`;
+            return httpDirectWs(locHost);
           }
         } catch (_) {
           /* ignore */
@@ -30,10 +32,10 @@ export function getWebSocketBase(): string {
       }
       return e;
     }
-    return "ws://120.26.186.130:8000/alienStore/socket";
+    return httpDirectWs(locHost);
   }
   if (envBase) {
     return envBase.replace(/\/$/, "");
   }
-  return "ws://120.26.186.130:8000/alienStore/socket";
+  return `ws://127.0.0.1:${directPort}/alienStore/socket`;
 }