节点http-proxy最少连接代理

时间:2013-12-15 06:05:28

标签: node.js

我想使用节点http-proxy来创建“最少连接”代理。换句话说,它选择一个目前连接最少的后端。代理有一个“结束”事件,但它没有传递给你任何信息,所以我不知道如何用当前的并发请求数增加/减少每个后端的计数器。

1 个答案:

答案 0 :(得分:2)

我认为您可以等待将响应发送给客户。

例如:

var backends = [
  { host : 'backend1', port: 80, active : 0 },
  { host : 'backend2', port: 80, active : 0 },
  { host : 'backend3', port: 80, active : 0 },
  { host : 'backend4', port: 80, active : 0 },
];

httpProxy.createServer(function (req, res, proxy) {
  var buffer = httpProxy.buffer(req);

  // Pick the backend with the least active requests (naive implementation).
  var backend = backends.sort(function(a, b) {
    return a.active - b.active;
  })[0];

  // Add a new active request.
  backend.active++;

  // Proxy the request.
  proxy.proxyRequest(req, res, {
    host    : backend.host,
    port    : backend.port,
    buffer  : buffer
  });

  // When the response is finished, decrease the count.
  res.on('finish', function() {
    backend.active--;
  });
}).listen(8000);