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

时间:2017-05-02 07:58:11

标签: node.js websocket socket.io

通过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来使大请求无效

1 个答案:

答案 0 :(得分:0)

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

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

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