add automatic backoff when server is at capacity

This commit is contained in:
Jakob Ketterl 2020-01-10 21:38:46 +01:00
parent 5a57648eec
commit cbd87abc3d
2 changed files with 16 additions and 3 deletions

View File

@ -1145,7 +1145,12 @@ function on_ws_recv(evt) {
break; break;
case 'pocsag_data': case 'pocsag_data':
update_pocsag_panel(json['value']); update_pocsag_panel(json['value']);
break break;
case 'backoff':
divlog("Server is currently busy: " + json['reason'], true);
// set a higher reconnection timeout right away to avoid additional load
reconnect_timeout = 16000;
break;
default: default:
console.warn('received message of unknown type: ' + json['type']); console.warn('received message of unknown type: ' + json['type']);
} }

View File

@ -3,7 +3,7 @@ from owrx.dsp import DspManager
from owrx.cpu import CpuUsageThread from owrx.cpu import CpuUsageThread
from owrx.sdr import SdrService from owrx.sdr import SdrService
from owrx.source import SdrSource from owrx.source import SdrSource
from owrx.client import ClientRegistry from owrx.client import ClientRegistry, TooManyClientsException
from owrx.feature import FeatureDetector from owrx.feature import FeatureDetector
from owrx.version import openwebrx_version from owrx.version import openwebrx_version
from owrx.bands import Bandplan from owrx.bands import Bandplan
@ -86,7 +86,12 @@ class OpenWebRxReceiverClient(Client):
self.configSub = None self.configSub = None
self.connectionProperties = {} self.connectionProperties = {}
ClientRegistry.getSharedInstance().addClient(self) try:
ClientRegistry.getSharedInstance().addClient(self)
except TooManyClientsException:
self.write_backoff_message("too many clients")
self.close()
raise
pm = PropertyManager.getSharedInstance() pm = PropertyManager.getSharedInstance()
@ -316,6 +321,9 @@ class OpenWebRxReceiverClient(Client):
def write_pocsag_data(self, data): def write_pocsag_data(self, data):
self.send({"type": "pocsag_data", "value": data}) self.send({"type": "pocsag_data", "value": data})
def write_backoff_message(self, reason):
self.send({"type": "backoff", "reason": reason})
class MapConnection(Client): class MapConnection(Client):
def __init__(self, conn): def __init__(self, conn):