@Azperin
Дилетант

Ограничение запросов по сокету своими руками?

Насколько такой подход будет, не столько правильным, а жизнеспособным в плане эффективности, в случае, если юзер начнет спамить какую-либо кнопку (на сайте просто любое действие реактивное и бродкаст идет на всех подключенных юзеров) ? Или же есть другой вариант защиты от дурака ?
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 запросов в секунду.
  • Вопрос задан
  • 48 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы