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
JavaScript
;
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