javascript - 如何限制客户端通过 websocket 发送的数据量?

标签 javascript node.js express websocket limit

我正在使用 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/

相关文章:

javascript - 使用组件实现 Tiles 布局

javascript - Node.js - Javascript - 如何将变量传递给回调函数

javascript - 在编辑器中找不到 module.exports 类,并且在运行时也没有找到构造函数

javascript - 如果我们将目录位置传递给 Node.js require 函数会发生什么?

javascript - React Router 仅当从 root url 启动时才能够进行路由

javascript - 从Url中获取特定字符串

javascript - 简化分页页面列表的生成

javascript - 如何在 JSON 对象中存储 JSON 字符串而不导致语法错误?

javascript - 如何将编码数据从python发送到nodejs

json - 纯文本到 JSON