refactor: ♻️ Use node:cluster instead of Web Workers

This commit is contained in:
Jesse Wierzbinski 2024-08-23 18:43:13 +02:00 committed by April John
parent 3279f3098b
commit 0a1c2b8cb3
3 changed files with 18 additions and 18 deletions

View file

@ -27,6 +27,7 @@ export enum SonicIndexType {
export class SonicSearchManager {
private searchChannel: SonicChannelSearch;
private ingestChannel: SonicChannelIngest;
private connected = false;
private logger = getLogger("sonic");
/**
@ -55,6 +56,10 @@ export class SonicSearchManager {
return;
}
if (this.connected) {
return;
}
!silent && this.logger.info`Connecting to Sonic...`;
// Connect to Sonic
@ -110,6 +115,7 @@ export class SonicSearchManager {
this.searchChannel.ping(),
this.ingestChannel.ping(),
]);
this.connected = true;
!silent && this.logger.info`Connected to Sonic`;
} catch (error) {
this.logger.fatal`Error while connecting to Sonic: ${error}`;

View file

@ -35,17 +35,12 @@ export default class Start extends BaseCommand<typeof Start> {
const numCpus = flags["all-threads"] ? os.cpus().length : flags.threads;
// Check if index is a JS or TS file (depending on the environment)
const index = (await Bun.file("index.ts").exists())
? "index.ts"
: "index.js";
// Resolves the path to the main module
const resolved = import.meta.resolve("../../index");
await import("../../setup");
process.env.NUM_CPUS = String(numCpus);
process.env.SILENT = flags.silent ? "true" : "false";
for (let i = 0; i < numCpus; i++) {
new Worker(index, {
type: "module",
});
}
await import(resolved);
}
}

View file

@ -1,16 +1,15 @@
import { configureLoggers } from "@/loggers";
import cluster from "node:cluster";
import { sentry } from "@/sentry";
import { createServer } from "@/server";
import { appFactory } from "~/app";
import { config } from "~/packages/config-manager/index";
import { setupDatabase } from "./drizzle/db";
if (import.meta.main) {
if (cluster.isPrimary) {
for (let i = 0; i < (Number(process.env.NUM_CPUS) ?? 1); i++) {
cluster.fork();
}
await import("./setup");
sentry?.captureMessage("Server started", "info");
} else {
createServer(config, await appFactory());
}
await setupDatabase();
await configureLoggers();
createServer(config, await appFactory());