summary refs log tree commit diff
path: root/bundle/src/start.ts
diff options
context:
space:
mode:
authorFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-10-18 17:38:31 +0200
committerFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-10-18 17:38:31 +0200
commitf6b00d2fcd32747974a0963e0da32cf2511c8ffb (patch)
tree15208317c1a3f908ae54e3d6536ee7d7aff31462 /bundle/src/start.ts
parentRevert "fix: make the CDN build correctly" (diff)
downloadserver-f6b00d2fcd32747974a0963e0da32cf2511c8ffb.tar.xz
:zap: vertically scale bundle
Diffstat (limited to 'bundle/src/start.ts')
-rw-r--r--bundle/src/start.ts65
1 files changed, 37 insertions, 28 deletions
diff --git a/bundle/src/start.ts b/bundle/src/start.ts
index 8e7c3129..ee914b8b 100644
--- a/bundle/src/start.ts
+++ b/bundle/src/start.ts
@@ -1,6 +1,6 @@
 // process.env.MONGOMS_DEBUG = "true";
 import "reflect-metadata";
-import cluster from "cluster";
+import cluster, { Worker } from "cluster";
 import os from "os";
 import { red, bold, yellow, cyan } from "nanocolors";
 import { initStats } from "./stats";
@@ -8,20 +8,21 @@ import { config } from "dotenv";
 config();
 import { execSync } from "child_process";
 
-// TODO: add tcp socket event transmission
-const cores = 1 || Number(process.env.threads) || os.cpus().length;
+// TODO: add socket event transmission
+let cores = Number(process.env.THREADS) || os.cpus().length;
 
-function getCommitOrFail() {
-	try {
-		return execSync("git rev-parse HEAD").toString().trim();
-	} catch (e) {
-		return null;
+if (cluster.isMaster) {
+	function getCommitOrFail() {
+		try {
+			return execSync("git rev-parse HEAD").toString().trim();
+		} catch (e) {
+			return null;
+		}
 	}
-}
-const commit = getCommitOrFail();
+	const commit = getCommitOrFail();
 
-console.log(
-	bold(`
+	console.log(
+		bold(`
 ███████╗ ██████╗ ███████╗███████╗ ██████╗ ██████╗ ██████╗ ██████╗
 ██╔════╝██╔═══██╗██╔════╝██╔════╝██╔════╝██╔═══██╗██╔══██╗██╔══██╗
 █████╗  ██║   ██║███████╗███████╗██║     ██║   ██║██████╔╝██║  ██║
@@ -38,32 +39,40 @@ console.log(
 		)}
 
 Current commit: ${
-		commit !== null
-			? `${cyan(commit)} (${yellow(commit.slice(0, 7))})`
-			: "Unknown (Git cannot be found)"
-	}
+			commit !== null
+				? `${cyan(commit)} (${yellow(commit.slice(0, 7))})`
+				: "Unknown (Git cannot be found)"
+		}
 `)
-);
+	);
 
-if (commit == null)
-	console.log(yellow(`Warning: Git is not installed or not in PATH.`));
+	if (commit == null) {
+		console.log(yellow(`Warning: Git is not installed or not in PATH.`));
+	}
 
-if (cluster.isMaster && !process.env.masterStarted) {
-	process.env.masterStarted = "true";
+	initStats();
 
-	(async () => {
-		initStats();
+	console.log(`[Process] starting with ${cores} threads`);
 
-		if (cores === 1) {
-			require("./Server");
-			return;
-		}
+	if (cores === 1) {
+		require("./Server");
+	} else {
+		process.env.EVENT_TRANSMISSION = "process";
 
 		// Fork workers.
 		for (let i = 0; i < cores; i++) {
 			cluster.fork();
+			console.log(`[Process] worker ${i} started.`);
 		}
 
+		cluster.on("message", (sender: Worker, message: any) => {
+			for (const id in cluster.workers) {
+				const worker = cluster.workers[id];
+				if (worker === sender || !worker) continue;
+				worker.send(message);
+			}
+		});
+
 		cluster.on("exit", (worker: any, code: any, signal: any) => {
 			console.log(
 				`[Worker] ${red(
@@ -72,7 +81,7 @@ if (cluster.isMaster && !process.env.masterStarted) {
 			);
 			cluster.fork();
 		});
-	})();
+	}
 } else {
 	require("./Server");
 }