mirror of
https://github.com/mempool/mempool.git
synced 2025-01-18 05:12:35 +01:00
NodeJS cluster support.
This commit is contained in:
parent
21e985202d
commit
347ab1e220
@ -14,6 +14,7 @@
|
|||||||
"INITIAL_BLOCK_AMOUNT": 8,
|
"INITIAL_BLOCK_AMOUNT": 8,
|
||||||
"TX_PER_SECOND_SPAN_SECONDS": 150,
|
"TX_PER_SECOND_SPAN_SECONDS": 150,
|
||||||
"ELECTRS_API_URL": "http://localhost:50001",
|
"ELECTRS_API_URL": "http://localhost:50001",
|
||||||
|
"CLUSTER_NUM_CORES": 1,
|
||||||
"BISQ_ENABLED": false,
|
"BISQ_ENABLED": false,
|
||||||
"BISQ_BLOCKS_DATA_PATH": "/bisq/seednode-data/btc_mainnet/db/json",
|
"BISQ_BLOCKS_DATA_PATH": "/bisq/seednode-data/btc_mainnet/db/json",
|
||||||
"BISQ_MARKET_ENABLED": false,
|
"BISQ_MARKET_ENABLED": false,
|
||||||
|
@ -505,7 +505,8 @@ class BisqMarketsApi {
|
|||||||
trade_id_to: string | undefined,
|
trade_id_to: string | undefined,
|
||||||
trade_id_from: string | undefined,
|
trade_id_from: string | undefined,
|
||||||
direction: 'buy' | 'sell' | undefined,
|
direction: 'buy' | 'sell' | undefined,
|
||||||
sort: string, limit: number,
|
sort: string,
|
||||||
|
limit: number,
|
||||||
integerAmounts: boolean = true,
|
integerAmounts: boolean = true,
|
||||||
): TradesData[] {
|
): TradesData[] {
|
||||||
let trade_id_from_ts: number | null = null;
|
let trade_id_from_ts: number | null = null;
|
||||||
|
@ -6,6 +6,8 @@ import * as compression from 'compression';
|
|||||||
import * as http from 'http';
|
import * as http from 'http';
|
||||||
import * as https from 'https';
|
import * as https from 'https';
|
||||||
import * as WebSocket from 'ws';
|
import * as WebSocket from 'ws';
|
||||||
|
import * as cluster from 'cluster';
|
||||||
|
import * as os from 'os';
|
||||||
|
|
||||||
import { checkDbConnection } from './database';
|
import { checkDbConnection } from './database';
|
||||||
import routes from './routes';
|
import routes from './routes';
|
||||||
@ -19,13 +21,36 @@ import bisq from './api/bisq/bisq';
|
|||||||
import bisqMarkets from './api/bisq/markets';
|
import bisqMarkets from './api/bisq/markets';
|
||||||
|
|
||||||
class Server {
|
class Server {
|
||||||
wss: WebSocket.Server;
|
private wss: WebSocket.Server | undefined;
|
||||||
server: https.Server | http.Server;
|
private server: https.Server | http.Server | undefined;
|
||||||
app: Express;
|
private app: Express;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.app = express();
|
this.app = express();
|
||||||
|
|
||||||
|
if (!config.CLUSTER_NUM_CORES || config.CLUSTER_NUM_CORES === 1) {
|
||||||
|
this.startServer();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cluster.isMaster) {
|
||||||
|
console.log(`Mempool Server is running on port ${config.HTTP_PORT}`);
|
||||||
|
|
||||||
|
const numCPUs = config.CLUSTER_NUM_CORES;
|
||||||
|
for (let i = 0; i < numCPUs; i++) {
|
||||||
|
cluster.fork();
|
||||||
|
}
|
||||||
|
|
||||||
|
cluster.on('exit', (worker, code, signal) => {
|
||||||
|
console.log(`Mempool Worker #${worker.process.pid} died. Restarting...`, signal || code);
|
||||||
|
cluster.fork();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.startServer(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
startServer(worker = false) {
|
||||||
this.app
|
this.app
|
||||||
.use((req: Request, res: Response, next: NextFunction) => {
|
.use((req: Request, res: Response, next: NextFunction) => {
|
||||||
res.setHeader('Access-Control-Allow-Origin', '*');
|
res.setHeader('Access-Control-Allow-Origin', '*');
|
||||||
@ -67,7 +92,11 @@ class Server {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.server.listen(config.HTTP_PORT, () => {
|
this.server.listen(config.HTTP_PORT, () => {
|
||||||
console.log(`Server started on port ${config.HTTP_PORT}`);
|
if (worker) {
|
||||||
|
console.log(`Mempool Server worker #${process.pid} started`);
|
||||||
|
} else {
|
||||||
|
console.log(`Mempool Server is running on port ${config.HTTP_PORT}`);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,7 +108,9 @@ class Server {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setUpWebsocketHandling() {
|
setUpWebsocketHandling() {
|
||||||
|
if (this.wss) {
|
||||||
websocketHandler.setWebsocketServer(this.wss);
|
websocketHandler.setWebsocketServer(this.wss);
|
||||||
|
}
|
||||||
websocketHandler.setupConnectionHandling();
|
websocketHandler.setupConnectionHandling();
|
||||||
statistics.setNewStatisticsEntryCallback(websocketHandler.handleNewStatistic.bind(websocketHandler));
|
statistics.setNewStatisticsEntryCallback(websocketHandler.handleNewStatistic.bind(websocketHandler));
|
||||||
blocks.setNewBlockCallback(websocketHandler.handleNewBlock.bind(websocketHandler));
|
blocks.setNewBlockCallback(websocketHandler.handleNewBlock.bind(websocketHandler));
|
||||||
|
Loading…
Reference in New Issue
Block a user