首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AWS节点上,socketcluster不能连接超过1000个连接

在AWS节点上,socketcluster不能连接超过1000个连接
EN

Stack Overflow用户
提问于 2015-03-10 00:30:49
回答 1查看 1.1K关注 0票数 5

我正在运行一个简单的socketcluster node.js服务器,并从node.js websocket客户端连接到它。

通过在本地Ubuntu14.04上运行服务器,我可以将超过10,000个客户端连接到服务器。但在亚马逊网络服务EC2 (c3-large) ubuntu14.04实例上,同样的代码只能连接不到1000个连接。

修改了etc/security/limits.conf,并在EC2实例上将软性和硬性的限制设置为65535。

建议的Posix软限制Node.js maxing out at 1000 concurrent connections无济于事。

其他sysctl参数在我的本地ubuntu和EC2实例之间没有太大区别。

延迟可能不是问题,因为我尝试从多个客户端计算机连接到服务器,但连接数量仍然小于1000。

是否有任何可能影响性能的AWS环境变量?发往和来自EC2的消息数量会受到限制吗?

代码语言:javascript
复制
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--

代码语言:javascript
复制
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);
    });
}
EN

回答 1

Stack Overflow用户

发布于 2015-03-12 19:16:33

我的错是,代码和AWS没有任何问题。在我的设置中,用于AWS设置的交换机/isp-connection无法处理许多连接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28947100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档