我正在使用ws
模块,我想限制客户端通过websocket发送到1Mb的数据量。这将防止恶意用户发送大量数据(以GB为单位),导致服务器内存不足,从而导致每个普通用户的拒绝服务错误。
例如,示例Express允许指定邮政请求正文的最大大小,如下所示:
bodyParser.json({limit:'1Mb'})
我如何使用ws
模块执行类似操作?
我尝试了
var ws = require('ws').Server
var wsserver = new ws({port:8080, limit:'1Mb'})
但这当然不起作用。
我希望中断数据传输(超过1Mb后)并关闭websocket连接。我怎样才能做到这一点?
必须有办法限制来自客户端的数据帧......
答案 0 :(得分:12)
该库中没有(当前)该功能。
在他们的源代码中查看,https://github.com/websockets/ws/blob/master/lib/Receiver.js中的起始位置似乎是processPacket()
方法。
一旦有了可用的数据包标头,您就可以看到正在发送的消息的大小。如果它高于某个阈值,应该有一种方法可以在所有字节甚至到达你的网络之前关闭连接。
当然,最好的做法是分叉他们的存储库,发出一个功能请求,添加一个配置选项,如果没有设置默认不采取任何操作(不破坏向后兼容性),并提交拉请求。
如果他们喜欢,他们会合并。如果没有,您仍然可以将他们未来的版本合并到您自己的回购中并保持最新状态,而无需在每次提交新版本时重新开始工作。