try to ramp connections

This commit is contained in:
Ben
2023-12-01 20:18:26 -05:00
parent f1d470b2c6
commit c39de1387b
+25
View File
@@ -1,5 +1,6 @@
import { Injectable, OnModuleInit } from '@nestjs/common'; import { Injectable, OnModuleInit } from '@nestjs/common';
import { ConfigService } from '@nestjs/config'; import { ConfigService } from '@nestjs/config';
import { Interval } from '@nestjs/schedule';
import { Server, Socket } from 'net'; import { Server, Socket } from 'net';
import { StratumV1Client } from '../models/StratumV1Client'; import { StratumV1Client } from '../models/StratumV1Client';
@@ -15,6 +16,9 @@ import { StratumV1JobsService } from './stratum-v1-jobs.service';
@Injectable() @Injectable()
export class StratumV1Service implements OnModuleInit { export class StratumV1Service implements OnModuleInit {
private maxConnections = 100;
private currentConnections = 0;
constructor( constructor(
private readonly bitcoinRpcService: BitcoinRpcService, private readonly bitcoinRpcService: BitcoinRpcService,
private readonly clientService: ClientService, private readonly clientService: ClientService,
@@ -28,6 +32,11 @@ export class StratumV1Service implements OnModuleInit {
} }
@Interval(1000 * 30)
public async incrementConnections() {
this.maxConnections += 100;
}
async onModuleInit(): Promise<void> { async onModuleInit(): Promise<void> {
console.log(`Enable Solo: ${process.env.ENABLE_SOLO}`) console.log(`Enable Solo: ${process.env.ENABLE_SOLO}`)
if (process.env.ENABLE_SOLO == 'true') { if (process.env.ENABLE_SOLO == 'true') {
@@ -36,6 +45,7 @@ export class StratumV1Service implements OnModuleInit {
if (process.env.NODE_APP_INSTANCE == '0') { if (process.env.NODE_APP_INSTANCE == '0') {
await this.clientService.deleteAll(); await this.clientService.deleteAll();
} }
setTimeout(() => { setTimeout(() => {
this.startSocketServer(); this.startSocketServer();
}, 1000 * 10) }, 1000 * 10)
@@ -46,6 +56,15 @@ export class StratumV1Service implements OnModuleInit {
private startSocketServer() { private startSocketServer() {
const server = new Server(async (socket: Socket) => { const server = new Server(async (socket: Socket) => {
this.currentConnections++;
if (this.currentConnections > this.maxConnections) {
// If the maximum number of connections is reached, reject the new connection
console.log('Connection limit reached. Rejecting new connection.');
socket.end(); // Close the socket immediately
this.currentConnections--; // Decrement the count as the connection is rejected
}
//5 min //5 min
socket.setTimeout(1000 * 60 * 5); socket.setTimeout(1000 * 60 * 5);
@@ -76,6 +95,11 @@ export class StratumV1Service implements OnModuleInit {
socket.destroy(); socket.destroy();
}); });
socket.on('end', () => {
this.currentConnections--;
});
socket.on('error', async (error: Error) => { }); socket.on('error', async (error: Error) => { });
// //console.log(`Client disconnected, socket error, ${client.extraNonceAndSessionId}`); // //console.log(`Client disconnected, socket error, ${client.extraNonceAndSessionId}`);
@@ -83,6 +107,7 @@ export class StratumV1Service implements OnModuleInit {
}); });
server.listen(process.env.STRATUM_PORT, () => { server.listen(process.env.STRATUM_PORT, () => {
console.log(`Stratum server is listening on port ${process.env.STRATUM_PORT}`); console.log(`Stratum server is listening on port ${process.env.STRATUM_PORT}`);
}); });