Подтвердить что ты не робот

Как ограничить объем данных, отправляемых клиентом через websocket?

Я использую модуль ws, и я хотел бы ограничить объем данных, отправляемых клиентом через websocket, до 1 Мб. Это предотвратит отправку вредоносного пользователя огромными объемами данных (с точки зрения GB), из-за которых сервер исчерпает память, что приведет к ошибкам отказа в обслуживании для каждого обычного пользователя.
Например, пример Express позволяет указать максимальный размер тела запроса сообщения так:

bodyParser.json({limit:'1Mb'})

Как я делаю что-то подобное с модулем ws?
Я пробовал

var ws = require('ws').Server
var wsserver = new ws({port:8080, limit:'1Mb'})

Но это, конечно, не сработает.
Я хочу, чтобы передача данных прерывалась (после превышения 1 Мб) и закрытия веб-сокета. Как я могу это сделать?
Должен быть способ ограничить рамки данных, поступающих от клиента...

4b9b3361

Ответ 1

Эта способность не существует (в настоящее время) в этой библиотеке.

Запуская их исходный код, кажется, что местом для начала было бы processPacket() метод в https://github.com/websockets/ws/blob/master/lib/Receiver.js.

Как только у вас есть заголовок пакета, вы можете увидеть размер отправляемого сообщения. Если он превышает определенный порог, должен быть способ закрыть соединение, прежде чем все байты будут даже попадать в вашу сеть.

Конечно, было бы неплохо сделать это, чтобы разветкить их репозиторий, выпустить запрос функции, добавить параметр конфигурации, который по умолчанию не предпринимает никаких действий, если он не установлен (не нарушайте обратную совместимость), и отправляйте запрос на растяжение.

Если им это нравится, они сольются. Если нет, вы все равно сможете объединить свои будущие версии в свое собственное репо и оставаться в курсе событий без необходимости повторять свою работу каждый раз, когда они отправляют новый выпуск.