api: cluster support

still missing synchronization for some structures
This commit is contained in:
jj
2024-10-31 22:59:06 +00:00
parent 2d6d406f48
commit 40d6a02b61
6 changed files with 114 additions and 24 deletions

29
api/src/misc/cluster.js Normal file
View File

@@ -0,0 +1,29 @@
import net from "node:net";
import cluster from "node:cluster";
import { isCluster } from "../config.js";
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 () => {
const { getSalt } = await import("../stream/manage.js");
const salt = getSalt();
for (let i = 1; i < env.instanceCount; ++i) {
const worker = cluster.fork();
worker.once('message', () => {
worker.send({ salt });
});
}
}