使用socket.io粘性会话与node.js集群模块

mutmk8jj  于 11个月前  发布在  Node.js
关注(0)|答案(1)|浏览(99)

有没有办法在集群模块中维护与套接字服务器的粘性会话?我还没有看到任何这样的例子。我在我的客户端上得到{"code":1,"message":"Session ID unknown"}错误,因为没有粘性会话。我尝试强制webSockets而不是首先轮询,但这使连接对我来说不可靠,所以这不是一个选项。
代码:

const cluster = require("cluster");
const numCPUs = require("os").cpus().length;

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

  cluster.on("exit", function () {
    cluster.fork();
  });
} else {
  const origin = "http://localhost:3000";
  const io = require("socket.io")(3001, {
    cors: {origin}
  });
  const {createClient} = require("redis");
  const redisAdapter = require("@socket.io/redis-adapter");
  const pubClient = createClient({ host: "localhost", port: 6379 });
  const subClient = pubClient.duplicate();

  io.adapter(redisAdapter(pubClient, subClient));

  io.on("connection", function (socket) {
    //...
  });
};

字符串

6za6bjd0

6za6bjd01#

const { setupMaster, setupWorker } = require("@socket.io/sticky");
const { createAdapter, setupPrimary } = require("@socket.io/cluster-adapter");

if (cluster.isMaster) {
      // HTTP Server on the primary
    const httpServer = http.createServer();

    // This is the primary setup sticky session
    setupMaster(httpServer, {
        loadBalancingMethod: "least-connection"
    });

    // set up connection between master and workers
    setupPrimary();

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

  cluster.on("exit", function () {
    cluster.fork();
  });
}

字符串

相关问题