套接字.node.js的IO性能



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

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

有谁知道是什么问题吗?

感谢

编辑

Server: 4096 Mo memory and 1vcpu .

服务端代码:

 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、打开文件限制(如果涉及到文件系统)和一般硬件设置只是一些重要因素。而且,实际发生在服务器端的处理类型将影响并发连接阈值。

相关内容

  • 没有找到相关文章