socket.io 表现 node.js

socket.io performance with node.js

所以,我有一个 node.js 服务器,它从手机 (GPS) 接收数据。服务器虽然会进行一些计算以找出速度或距离。 我正在使用 socket.IO 来传输数据,并使用网络客户端可视化它们。

这是我的问题:当我模拟 500 部手机时,插座会掉线。在套接字崩溃之前,我只能在网页上可视化我的数据几秒钟。 我读了一些像这样的文章:https://bocoup.com/weblog/node-stress-test-analysis/ 作者可以打开10000个客户端...所以我不明白为什么我不能!

有人知道问题出在哪里吗?

谢谢

编辑

服务器:4096 Mo 内存和 1 个 vCPU。

服务器代码:

 var app = express();    

// creation
var server = require('http').createServer(app);

var io = require('socket.io').listen(server);
var httpsIO = require('socket.io').listen(httpsServer); 

// config du port
// HTTP
var port = 8080;

server.listen(port);

套接字:

var mongoose = require('mongoose');

module.exports = function(server) 
{

    var io = require('socket.io').listen(server);
    io.sockets.setMaxListeners(0);

    io.sockets.on('connection', function (socket) {
        var d;
        var address = socket.handshake.address;
        socket.emit('connection_ok');

        socket.on('join', function (ids) {
            var datas = new Array();
            if(ids.split(' ').length > 1)
            {
                var coureur_id = ids.split(' ').shift();
                var course_id = ids.split(' ').pop();
                participant(coureur_id, course_id, function(coureur_id, course_id, date)
                {
                    d = date;
                    socket.emit('ack', coureur_id);
                    socket.join(coureur_id);
                });
            }
            else
            {
                var course_id = ids;
                getParticipants(course_id, function(participants)
                {
                    if(participants != null)
                    {
                        for(var j=0; j<participants.length; j++)
                        {
                    socket.join(participants[j].user_id)
                        }
                    }
                });         
            }




              // Mobil phone update the position
              socket.on('commit', function (pos) 
              {
                var fini = false;
                if (pos) 
                {
                    if (pos['latitude'] && pos['longitude']) 
                    {
                        if (pos['speed'] != undefined) 
                        {
                            if (pos['distance'] != undefined) 
                            {   
                                // datas sent to the database (mongoDB)
                              addCoureurData(coureur_id, course_id, pos, d, datas, fini, function(res)
                                    {

                                      datas = res.datas;
                                      var classement = res.classement;
                                      pourcentAccompli(course_id,coureur_id,pos, datas, function(result)
                                      {
                                        socket.broadcast.to(coureur_id).emit('update', { user : coureur_id, latitude : pos['latitude'], longitude : pos['longitude'], vitesse : pos['speed'], distance : pos['distance'], classement : classement, pourcent : result});
                                      });
                                    });
                            }
                        }
                    }
                 }
               });
          });
     });
}

假设代码设计本身没有任何错误,您的服务器可以处理的并发连接数将因多种因素而异。分配给节点应用程序的 RAM、打开文件限制(如果涉及文件系统)和一般硬件设置只是一些重要因素。此外,服务器端实际发生的处理类型会影响并发连接阈值。