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

Socket.IO集群部署时HTTP运行正常、HTTPS无法生效问题咨询

问题根因

Worker进程重复创建HTTPS服务实例是核心错误。@socket.io/sticky的工作逻辑为:主进程负责监听端口、完成TLS握手、执行 sticky 会话转发,Worker进程仅需挂载Socket.IO实例即可,无需再独立创建HTTPS服务、也不需要监听端口。

修复后代码

const cluster = require("cluster");
const https = require("https");
var fs = require("fs");
const { Server } = require("socket.io");
const numCPUs = require("os").cpus().length;
const { setupMaster, setupWorker } = require("@socket.io/sticky");
const { createAdapter, setupPrimary } = require("@socket.io/cluster-adapter");
const sslOptions = {
  key: fs.readFileSync("security/cert.key"),
  cert: fs.readFileSync("security/cert.pem")
};
const options = { cors: true, origins: "*" };
if (cluster.isMaster) {
  console.log(`Master ${process.pid} is running`);

  const httpServer = https.createServer(sslOptions);

  // setup sticky sessions
  setupMaster(httpServer, {
    loadBalancingMethod: "least-connection"
  });

  setupPrimary();

  cluster.setupPrimary({
    serialization: "advanced"
  });

  httpServer.listen(8000);

  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on("exit", (worker) => {
    console.log(`Worker ${worker.process.pid} died`);
    cluster.fork();
  });
} else {
  console.log(`Worker ${process.pid} started`);

  // 移除Worker进程里的HTTPS服务创建逻辑
  const io = new Server(options);

  // use the cluster adapter
  io.adapter(createAdapter());

  // setup connection with the primary process
  setupWorker(io);

  io.on("connection", (socket) => {
    console.log("connected" + process.pid);
    io.emit("data", "connected to worker: " + cluster.worker.id);
  });
}

额外校验项

  • 确认证书文件security/cert.key、security/cert.pem的读取权限正常,主进程启动用户可正常读取这两个文件
  • 客户端连接时使用和证书匹配的域名,不要直接用IP访问,避免证书校验失败导致连接断开
  • 如果前端有反向代理层,需确保代理开启了WebSocket支持、sticky会话配置,同时正确透传HTTPS相关请求头

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:57:02