【问题标题】:Socket.io RangeError: Array buffer allocation failedSocket.io RangeError:数组缓冲区分配失败
【发布时间】:2017-05-02 20:59:30
【问题描述】:

通过 socket.io 发送大文件会导致服务器崩溃

server > RangeError: Array buffer allocation failed               │
server >     at Buffer.Uint8Array (native)                        │
server >     at FastBuffer (buffer.js:12:5)                       │
server >     at createUnsafeBuffer (buffer.js:39:12)              │
server >     at arrayBufferToBuffer (/home/htdocs/socket/server/  │
node_modules/engine.io-parser/lib/index.js:371:16)                │
server >     at Object.exports.decodePacket (/home/htdocs/socket  │
/server/node_modules/engine.io-parser/lib/index.js:159:12)        │
server >     at WebSocket.Transport.onData (/home/htdocs/socket/  │
server/node_modules/engine.io/lib/transport.js:116:24)            │
server >     at WebSocket.onData (/home/htdocs/socket/server/nod  │
e_modules/engine.io/lib/transports/websocket.js:79:30)            │
server >     at onServerMessage (/home/htdocs/socket/server/node  │
_modules/uws/uws.js:18:15)

所以它是我的应用程序的“开放”漏洞,不可能在客户端按大小过滤文件,因为客户端是用 JavaScript 编写的,用户可以轻松修改它,是否有可能以某种方式禁用接受大请求 node.js /socket.io 端?

Nginx 用于负载均衡,所以也许可以配置 nginx 使大请求无效

【问题讨论】:

    标签: node.js websocket socket.io


    【解决方案1】:

    通过传递 maxHttpBufferSize (maxPayload in ws) 参数(以字节为单位)解决

    const io = require('socket.io')(port, {
        'maxHttpBufferSize': 1000000
    });
    

    如果发生 DoS 或文件太大,socket 将与服务器断开连接,服务器将继续正常工作。

    【讨论】:

      猜你喜欢
      • 2022-08-08
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 2016-12-18
      • 2014-04-12
      相关资源
      最近更新 更多