javascript - nodejs - websocket server
¿Cómo limitar la cantidad de datos que envía el cliente a través de websocket? (1)
Estoy usando el módulo ws
y me gustaría limitar la cantidad de datos que envía el cliente a través de websocket a 1Mb. Esto evitará que un usuario malintencionado envíe grandes cantidades de datos (en términos de GB) haciendo que el servidor se quede sin memoria, lo que causaría errores de denegación de servicio para cada usuario normal.
Por ejemplo, el ejemplo Express permite especificar el tamaño máximo de un cuerpo de solicitud de envío de la siguiente manera:
bodyParser.json({limit:''1Mb''})
¿Cómo hago algo similar con el módulo ws
?
Lo intenté
var ws = require(''ws'').Server
var wsserver = new ws({port:8080, limit:''1Mb''})
Pero esto, por supuesto, no funciona.
Quiero que se interrumpa la transmisión de datos (después de que se exceda 1Mb) y que se cierre la conexión websocket. ¿Cómo puedo hacer eso?
Debe haber una manera de limitar los marcos de datos que vienen del cliente ...
Esa habilidad no existe (actualmente) en esa biblioteca.
Hurgando en torno a su código fuente, parece que el lugar para comenzar sería el método processPacket()
en https://github.com/websockets/ws/blob/master/lib/Receiver.js .
Una vez que tenga el encabezado del paquete disponible, puede ver el tamaño del mensaje que se está enviando. Si está por encima de un cierto umbral, debería haber una manera de cerrar la conexión antes de que todos los bytes lleguen a su red.
Por supuesto, lo bueno sería bifurcar su repositorio, emitir una solicitud de función, agregar una opción de configuración que no tome ninguna acción predeterminada si no está configurada (no interrumpir la compatibilidad hacia atrás) y enviar una solicitud de extracción .
Si les gusta, se fusionarán. De lo contrario, aún podrá fusionar sus futuras versiones en su propio repositorio y mantenerse actualizado sin tener que volver a hacer su trabajo cada vez que envíe una nueva versión.