1
0
Fork 0
mirror of https://github.com/wukko/cobalt.git synced 2025-04-06 02:01:39 +02:00
cobalt/api/src/misc/cluster.js

41 lines
1 KiB
JavaScript
Raw Normal View History

import cluster from "node:cluster";
2024-11-01 12:16:53 +00:00
import net from "node:net";
import { syncSecrets } from "../security/secrets.js";
import { env, isCluster } from "../config.js";
export { isPrimary, isWorker } from "node:cluster";
export const supportsReusePort = async () => {
try {
await new Promise((resolve, reject) => {
const server = net.createServer().listen({ port: 0, reusePort: true });
server.on('listening', () => server.close(resolve));
server.on('error', (err) => (server.close(), reject(err)));
});
return true;
} catch {
return false;
}
}
export const initCluster = async () => {
2024-11-01 12:16:53 +00:00
if (cluster.isPrimary) {
for (let i = 1; i < env.instanceCount; ++i) {
cluster.fork();
}
}
2024-11-01 12:16:53 +00:00
await syncSecrets();
}
export const broadcast = (message) => {
if (!isCluster || !cluster.isPrimary || !cluster.workers) {
return;
}
for (const worker of Object.values(cluster.workers)) {
worker.send(message);
}
}