我正在运行一个简单的socketcluster node.js服务器并从node.js websocket client连接到它。
通过在我的本地Ubuntu14.04上运行服务器,我可以将超过10,000个客户端连接到服务器。但是在AWS EC2(c3-large)ubuntu14.04实例上,相同的代码仅连接少于1000个连接。
修改了etc / security / limits.conf,并在EC2实例上将“soft nofile”和“hard nofile”的限制设置为65535。
建议Node.js maxing out at 1000 concurrent connections的Posix软限制没有帮助。
我的本地ubuntu和EC2实例之间的其他sysctl参数差异不大。
延迟可能不是问题,因为我尝试从多台客户端计算机连接到服务器仍然保持连接数量< 1000。
是否有可能影响性能的AWS环境变量? 进出EC2的消息数量是否有限制?
var posix = require('posix');
posix.setrlimit('nofile', {soft:10000});
var SocketCluster = require('socketcluster').SocketCluster;
var numCPUs = require('os').cpus().length;
var numWorkers = numCPUs;
var start = Date.now();
console.log("..... Starting Server....");
process.on('uncaughtException', function (err) {
console.log("***** SEVERE ERROR OCCURED!!! *****");
console.log(err);
});
var socketCluster = new SocketCluster({
balancers: 1,
workers: numWorkers,
stores: 1,
port: 7000,
appName: 'mysimapp',
workerController: __dirname + '/sim_server.js',
addressSocketLimit: 0,
socketEventLimit: 100,
rebootWorkerOnCrash: true,
useSmartBalancing: true
});
- sim_server.js -
module.exports.run = function(worker) {
var posix = require('posix');
posix.setrlimit('nofile', {soft:10000});
var connection_db = {};
var opencount = 0;
var closecount = 0;
var msgcount = 0;
function status()
{
console.log('open: ' + opencount);
console.log('close: ' + closecount);
//console.log('receive: ' + msgcount);
setTimeout(function(){
status();
},10000);
}
status();
websocket_server = worker.getSCServer();
websocket_server.on('connection', function(socket){
var mac;
socket.on('mac-id', function(data) {
opencount++;
mac = data;
connection_db[mac] = socket;
});
socket.on('message', function(data) {
msgcount++;
});
socket.on('close', function() {
delete connection_db[mac];
closecount++;
});
});
process.once('SIGINT', function() {
process.exit(0);
});
}
答案 0 :(得分:1)
我的不好,代码或AWS没有任何问题。 在我的设置中,用于AWS设置的switch / isp-connection无法处理许多连接。