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