45 lines
1.3 KiB
JavaScript
45 lines
1.3 KiB
JavaScript
/**
|
|
* Acai Code MCP Server - Cluster Mode
|
|
*
|
|
* Ejecuta múltiples workers para aprovechar todos los CPUs.
|
|
* Cada worker maneja sus propias conexiones SSE.
|
|
*/
|
|
|
|
import cluster from 'node:cluster';
|
|
import os from 'node:os';
|
|
|
|
const numCPUs = os.cpus().length;
|
|
// Usar máximo 4 workers o el número de CPUs, lo que sea menor
|
|
const numWorkers = Math.min(numCPUs, 4);
|
|
|
|
if (cluster.isPrimary) {
|
|
console.log(`[Cluster] Master ${process.pid} iniciando`);
|
|
console.log(`[Cluster] CPUs disponibles: ${numCPUs}`);
|
|
console.log(`[Cluster] Spawneando ${numWorkers} workers...`);
|
|
|
|
// Spawnear workers
|
|
for (let i = 0; i < numWorkers; i++) {
|
|
cluster.fork();
|
|
}
|
|
|
|
// Reiniciar worker si muere
|
|
cluster.on('exit', (worker, code, signal) => {
|
|
console.error(`[Cluster] Worker ${worker.process.pid} murió (${signal || code}). Reiniciando...`);
|
|
cluster.fork();
|
|
});
|
|
|
|
// Log cuando un worker está listo
|
|
cluster.on('online', (worker) => {
|
|
console.log(`[Cluster] Worker ${worker.process.pid} online`);
|
|
});
|
|
|
|
} else {
|
|
// Worker: ejecutar el servidor MCP
|
|
import('./index.js').then(() => {
|
|
console.log(`[Worker ${process.pid}] MCP Server iniciado`);
|
|
}).catch((err) => {
|
|
console.error(`[Worker ${process.pid}] Error:`, err);
|
|
process.exit(1);
|
|
});
|
|
}
|