12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import cluster from "cluster";
- import os from "os";
- import { setupMaster, setupWorker } from "@socket.io/sticky";
- import { createAdapter, setupPrimary } from "@socket.io/cluster-adapter";
- import { io } from "./io.js";
- import http from "http";
- import { Server } from "socket.io";
- import { controller } from "../controller/index.js";
- import { logger } from "../core/logger.js";
- const numCPUs = os.cpus().length;
- export class CoreCluster {
- constructor(port) {
- this.port = port;
- this.attachThead();
- }
- attachThead() {
- if (cluster.isMaster) {
- logger.debug("Total Number of Cores:", numCPUs);
- logger.debug(`Master ${process.pid} is running`);
- // setup sticky sessions
- const httpServer = http.createServer();
- setupMaster(httpServer, {
- loadBalancingMethod: "least-connection",
- });
- setupPrimary();
- cluster.setupPrimary({
- serialization: "advanced",
- });
- httpServer.listen(this.port);
- logger.debug(`server is running on port ${this.port}`);
- for (let i = 0; i < numCPUs; i++) {
- cluster.fork();
- }
- cluster.on("exit", (worker) => {
- logger.debug(`Worker ${worker.process.pid} died`);
- cluster.fork();
- });
- cluster.on("online", (worker) => {
- logger.debug("Worker %o is listening", worker.process.pid);
- });
- } else {
- logger.debug(`Worker ${process.pid} started`);
- // use the cluster adapter
- io.adapter(createAdapter());
-
- io.ready().then(()=>{
- controller.run();
- // setupWorker(io);
- })
- setupWorker(io);
- // controller.run();
- // setup connection with the primary process
-
-
- }
- }
- }
|