mirror of
https://github.com/appy-one/acebase-server.git
synced 2026-06-30 06:02:05 -06:00
62 lines
2.1 KiB
TypeScript
62 lines
2.1 KiB
TypeScript
import { AceBase } from 'acebase';
|
|
import { AceBaseServer } from './server';
|
|
import { AceBaseServerSettings } from './settings';
|
|
import * as cluster from 'cluster';
|
|
import * as os from 'os';
|
|
const numCPUs = 2; //os.cpus().length;
|
|
|
|
/**
|
|
* Node.js cluster example. You can use this as a reference how to create an AceBaseServer cluster using Node.js'
|
|
* built-in cluster functionality.
|
|
*
|
|
* If you want to run a pm2 or cloud-based cluster instead, do NOT use this code.
|
|
* To do that, see https://github.com/appy-one/acebase-ipc-server
|
|
*
|
|
*/
|
|
|
|
let dbname = "default";
|
|
let options: AceBaseServerSettings = { /* default options */ }; // Load from cluster.config.js!
|
|
options.authentication = { enabled: false };
|
|
options.https = { enabled: false };
|
|
|
|
if (cluster.isMaster) {
|
|
// Startup master
|
|
console.log(`Starting database server cluster with ${numCPUs} workers`);
|
|
const master = new AceBase(dbname, options);
|
|
master.once('ready', () => {
|
|
console.log(`Master database server started on process ${process.pid}`);
|
|
});
|
|
|
|
for (let i = 0; i < numCPUs; i++) {
|
|
const worker = cluster.fork();
|
|
worker.on('disconnect', () => {
|
|
console.error(`worker ${worker.process.pid} disconnected`);
|
|
});
|
|
worker.on('message', (msg) => {
|
|
if (msg === 'acebase-server-shutdown') {
|
|
// We could handle shutdown message here to kill the worker safely, but we'll do it in the worker threads instead: see below
|
|
// worker.kill();
|
|
}
|
|
});
|
|
}
|
|
|
|
cluster.on('exit', (worker, code, signal) => {
|
|
console.error(`worker ${worker.process.pid} died`);
|
|
});
|
|
}
|
|
else {
|
|
console.log(`Worker ${process.pid} is running`);
|
|
|
|
const server = new AceBaseServer(dbname, options);
|
|
server.ready(() => {
|
|
console.log(`Worker database server started on process ${process.pid}`);
|
|
});
|
|
// Handle shutdown event to exit the worker process safely
|
|
server.on('shutdown', () => {
|
|
process.exit();
|
|
});
|
|
// Other option:
|
|
// process.on('acebase-server-shutdown', () => {
|
|
// process.exit();
|
|
// });
|
|
}
|