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