UNPKG

bapig

Version:

Welcome to BAPIG, a powerful backend solution designed to streamline your development process. With over 40 built-in functionalities, BAPIG simplifies CRUD operations, facilitates authentication and encryption, handles communication tasks, and much more.

63 lines 3.03 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.useClustering = void 0; // src/server.ts var cluster_1 = __importDefault(require("cluster")); var print_1 = require("../helpers/print"); var server_1 = require("./server"); var helpers_1 = require("../helpers"); /** * Start a clustered server using the provided server function. * @param application - The Express application instance. */ var cpuNum = Number(process.env.NUMBER_OF_CPU_TO_USE) || 1; var useClustering = function (application) { try { // Check if the application parameter is provided if (!application) { throw new Error("Can't start server without application"); } // Check if the current process is the master process if (cluster_1.default.isPrimary && (cpuNum >= 1)) { var cpuMessage = "Device has: ".concat(helpers_1.numberOfCPUs, " CPU Core").concat(helpers_1.numberOfCPUs > 1 ? 's' : '', ".\n Using ").concat(cpuNum, " CPU").concat(cpuNum > 1 ? 's' : '', " for clustering."); print_1.print.log(cpuMessage); // Fork a worker for each CPU core for (var i = 0; i < cpuNum; i++) { cluster_1.default.fork(); } // Handle worker online event cluster_1.default.on('online', function (worker) { if (worker.process.connected) { var onlineMessage = "Worker ".concat(worker.process.pid, " is online"); print_1.print.success(onlineMessage); } }); // Handle worker disconnect event cluster_1.default.on('disconnect', function (worker) { var disconnectMessage = "Worker ".concat(worker.process.pid, " disconnected, a new one will be created once it exits"); print_1.print.warn(disconnectMessage); }); // Handle worker exit event cluster_1.default.on('exit', function (worker, _exitCode, _signalCode) { var exitMessage = "Worker ".concat(worker.process.pid, " died"); print_1.print.error(exitMessage); cluster_1.default.fork(); var replacementMessage = "Worker ".concat(worker.process.pid, " is attempting to signal for a new worker to take its place"); print_1.print.error(replacementMessage); }); } else { // Execute the provided server function with the application parameter in each worker (0, server_1.startServer)(application); } } catch (error) { var errorMessage = "Error in useClustering: ".concat(error.message); print_1.print.error(errorMessage); } }; exports.useClustering = useClustering; //# sourceMappingURL=cluster.js.map