【问题标题】:Is there a way to limit the maximum size of a websocket message?有没有办法限制 websocket 消息的最大大小?
【发布时间】:2015-08-29 07:53:36
【问题描述】:

我有一个应用程序,我希望限制连接的客户端通过网络发送的消息的最大大小。从理论上的maximum of a message in Node.js is about 1.9 GB 开始,如果某些恶意客户端尝试发送过大的数据包,我实际上绝不希望我的应用程序分配那么大的内存。

如何限制传入消息的大小,例如 1024 字节?

【问题讨论】:

  • @jfriend00 我的问题与内存分配有关,而不是带宽问题。如果我们在字符串上使用.length,如果该字符串是2gb ...这就是我们遇到问题的地方,当内存开始分配以检查长度时.. :(那家伙的答案是100%错误,你应该首先检查长度并在超过时关闭客户端连接..不仅仅是依赖带宽。如果你这样做,该数据将发送给连接的每个人(因为那是他正在谈论的聊天室)。跨度>
  • 这个问题来自github.com/websockets/ws/issues/513。现在带有复制/问题说明。这是相当大的 TBH。
  • 您可以将传入的数据通过管道传输到文件中。然后以一定的间隔/频率检查文件的大小。

标签: node.js websocket


【解决方案1】:

对于将来寻找此问题答案的任何人,请在服务器配置中使用 maxPayload 选项来限制 Node 读取消息之前的大小(这几乎总是您想要的)

const wss = new WebSocket.Server({
        clientTracking: true,
        maxPayload: 128 * 1024, // 128 KB
        path: "/learn",
        //....
})

【讨论】:

    【解决方案2】:

    每个字符的长度为 1 到 3 个字节。因此,从技术上讲,您可以只对字符串进行子串化以获得所需的长度。

    var limited = fullString.substring(0, 1024);
    

    或者你可以使用这样的包:utf8-binary-cutter

    【讨论】:

    • 我意识到我实际上并没有回答“在哪里”来限制 socket.io 管道中字符串大小的问题。但我会留下答案,因为寻找“如何限制字符串”的人可能会在这里结束。
    • 只是指出字符串中的每个字符不限于1个字节。例如,这个 char ☃ 的长度为 3 个字节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    相关资源
    最近更新 更多