使用socket.io通过HTTP套接字发送非常大的数据(> 250 MB)

时间:2019-07-08 13:33:34

标签: node.js socket.io

我正在使用节点运行服务器。我使用套接字进行从服务器到客户端的数据传输。来自客户端的特定请求需要从数据库中获取大量数据,然后使用服务器上的套接字将其发送给它。该应用程序将一直运行,直到从数据库中获取的数据大小达到大约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);
});

0 个答案:

没有答案