You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Webpack Module Federation环境下Socket.io生产环境连接失败求助

解决Webpack Module Federation下Socket.io客户端连接404问题

核心原因

微应用通过Module Federation被主应用加载后,客户端页面的上下文是主应用的域名。此时io.connect("")会默认使用当前页面的Origin作为Socket服务地址,而非微应用原本的服务地址,导致请求发送到主应用域名下,找不到Socket.io的路由,触发404错误。

解决方案

1. 明确指定Socket服务地址

修改客户端连接代码,直接传入Socket服务的完整K8s Ingress地址(推荐,避免路径混淆):

// 替换为你的Socket服务Ingress域名或地址
const socket = io.connect("http://socket-service.your-domain.com");

socket.on("someEvent", (param) => {
    doSomething();
});

如果主应用和Socket服务共享同一个域名,且Ingress配置了路径转发(比如/socket路径指向Socket服务),也可以用相对路径:

const socket = io.connect("/socket");

2. 优化服务端CORS配置

生产环境避免使用origin: "*",明确指定允许连接的主应用域名,提升安全性:

const initSocket = (server) => {
    io = require("socket.io")(server, {
        cors: { 
            origin: "http://main-app.your-domain.com", // 主应用的域名
            methods: ["GET", "POST"]
        }
    });
    io.on('connection', (socket) => {
        logging.mainLogger.info(`成功连接Socket: ${socket.id}`);
    });
    // 注意:io.listen(server)是冗余代码,app.listen已启动服务器,无需重复调用
}

3. 配置K8s Ingress支持WebSocket

Socket.io默认会先尝试WebSocket连接,失败后降级为Polling。确保Ingress配置支持WebSocket,添加必要注解:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: socket-service-ingress
  annotations:
    nginx.ingress.kubernetes.io/websocket-services: "socket-service" # 指定Socket服务名称
    nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
spec:
  rules:
  - host: socket-service.your-domain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: socket-service
            port:
              number: 3000 # Socket服务的端口

验证步骤

  1. 重启Socket服务和主应用,确保配置生效
  2. 打开主应用,查看控制台是否还有404请求
  3. 检查Socket服务日志,确认是否有新的连接日志输出

内容的提问来源于stack exchange,提问作者mattan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 11:54:24