我正在使用节点运行服务器。我使用套接字进行从服务器到客户端的数据传输。来自客户端的特定请求需要从数据库中获取大量数据,然后使用服务器上的套接字将其发送给它。该应用程序将一直运行,直到从数据库中获取的数据大小达到大约50 MB。对于较大的数据(大小大于200 MB),通过套接字发送数据将进程内存增加了2.5GB,我的应用程序崩溃了。我尝试了socket.io-stream,但没有任何改进。
我看到了许多类似问题的帖子,但找不到解决方案。我尝试将大数据分成较小的块,然后使用套接字分别发送。这减少了一点内存消耗(发送200 MB数据时增加1GB)。我不确定这是否是理想的解决方案。是否有任何方法/技巧可以通过节点JS中的socket.io发送这么大的内容?
PS:我正在使用object-sizeof模块来查找数据的内存大小
编辑: 实际代码具有套接字操作中处理的请求操作数。但是问题在于仅通过套接字发射发送大数据。我简化了代码,并附在这里
const http = require('http');
const express = require('express');
const app = express();
const server = http.createServer(app);
const io = require('socket.io')(server);
const port = 3050;
server.listen(port, function () {
console.log('Server listening at port ', port);
});
io.on('connection',function(socket){
socket.on('action', action => {
switch (action) {
case 'data':
let resultData = getData(); //API that query data from db and returns the large data
socket.emit('action', resultData);
});