通过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来使大请求无效
答案 0 :(得分:0)
通过传递maxHttpBufferSize(ws中的maxPayload)参数(以字节为单位)解决
const io = require('socket.io')(port, {
'maxHttpBufferSize': 1000000
});
如果是DoS或文件太大,套接字将与服务器断开连接,服务器将继续正常工作。