Node.js播放速度慢

时间:2014-06-27 10:47:38

标签: node.js scalability broadcast

我正在编写一个Node.js服务器,客户端可以通过/read?id=45连接到服务器(在此示例中客户端ID为45)。服务器将连接存储在对象中,当消息到达客户端#45时,它将在其上调用res.end(message)。或者,在60秒后,连接将被关闭,并且想法是客户再次呼叫/read

连接存储如下:

var openConn = {};

function handleReadReq(req, res) {
   var id = input.returnFromGet(req, 'id'); // fetches the ?id value

   // Save the connection to openConn
   openConn[id] = new Array();
   openConn[id].push(res);
   openConn[id].push( setTimeout(function() {
        openConn[id][0].end('');
        delete openConn[id];
           }
   }, 60 * 1000) ); 
}

如果我向/ bcast发送消息,它将广播到openConn中的所有连接,如下所示:

function doBcast(req, res) {
  var message = input.getPost('message'); // akin to input.returnFromGet

  var knownClients = 0
  var stealOpenConn = openConn; // 'steal' openConn
  openConn = {};

  for(var client in stealOpenConn) {
     clearTimeout(stealOpenConn[client][1]);
     stealOpenConn[client][0].end(message);
     ++knownClients;
  }

  res.end('' + knownClients);
}

这很棒!但是,一旦我连接了几千个客户端,它就会开始变得非常慢。以这种方式到达4000个客户端平均需要16秒,这是不可接受的。

我有什么办法可以提高速度吗?

我尝试使用数组而不是对象,这没有任何区别。处理openConn而不是通过stealOpenConn也不会改善任何事情。

0 个答案:

没有答案