Насколько такой подход будет, не столько правильным, а жизнеспособным в плане эффективности, в случае, если юзер начнет спамить какую-либо кнопку (на сайте просто любое действие реактивное и бродкаст идет на всех подключенных юзеров) ? Или же есть другой вариант защиты от дурака ?
const reqLimit = 10;
webSocket.on('connection', (ws) => {
ws.lastRequest = Date.now() - 1000; // от юзера считаем запросы в секунду, поэтому даем фору при коннекте
ws.fastRequestsCount = 0;
ws.on('message', (msg) => {
ws.fastRequestsCount = (Date.now() - ws.lastRequest) > 1000 ? 0 : (ws.fastRequestsCount + 1);
if (ws.fastRequestsCount > reqLimit) {
return;
};
ws.lastRequest = Date.now();
// дальше идет какая-то логика, тоесть мы тупо игнорим юзера если от него было больше 10 запросов в секунду
});
});
ps: условия по типу дебаунса:
Date.now() - ws.lastRequest < 100;
не подойдут, так как иногда нужен "бурст" на 4-6 запросов в секунду.