首页 文章

Socket.io RangeError:数组缓冲区分配失败

提问于
浏览 574
0

通过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 . 我身边?

Nginx用于负载 balancer ,因此可能配置nginx以使大请求无效

1 回答

  • 0

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

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

    如果是DoS或文件太大,套接字将与服务器断开连接,服务器将继续正常工作 .

相关问题