我正在使用 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连接。我怎样才能做到这一点?
必须有一种方法来限制来自客户端的数据帧......
最佳答案
该库中(当前)不存在该能力。
查看他们的源代码,似乎可以从 https://github.com/websockets/ws/blob/master/lib/Receiver.js 中的 processPacket()
方法开始。 .
获得可用的数据包 header 后,您就可以看到正在发送的消息的大小。如果它高于某个阈值,则应该有一种方法可以在所有字节都到达您的网络之前关闭连接。
当然,最好的做法是 fork 他们的存储库,发出功能请求,添加一个配置选项,如果未设置默认不采取任何操作(不要破坏向后兼容性),然后提交拉取请求。
如果他们喜欢,他们就会合并。如果没有,您仍然可以将他们 future 的版本合并到您自己的存储库中并保持最新状态,而无需在每次他们提交新版本时重新做您的工作。
关于javascript - 如何限制客户端通过 websocket 发送的数据量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30834736/