2013-12-15 4 views
1

Я хотел бы использовать http-proxy-узел для создания прокси-сервера с наименьшими соединениями. Другими словами, он выбирает бэкэнд, который в настоящее время имеет наименьшие соединения. Прокси имеет событие «end», но оно не передает вам никакой информации, поэтому я не уверен, как я могу увеличивать/уменьшать счетчик для каждого из моих бэкендов с текущим числом одновременных запросов.node http-proxy less connections proxy

+1

Довольно уверен, что нет ничего, что там может это сделать - вы, вероятно, придется создать его самостоятельно, используя WebSockets. Или вы посмотрели на [satellite] (https://npmjs.org/package/satellite)? – brandonscript

+0

Спасибо за указатель на спутник. В конечном счете, я также собираюсь управлять этим процессом на локальном хосте (может быть java, node и т. Д.) И иметь некоторые другие функции по их рециркуляции и т. Д., Поэтому спутниковый код будет хорош для просмотра в. – Dave

ответ

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); 
+0

Спасибо! Я, вероятно, настрою res.on («финиш») до того, как я прокси.proxyRequest() на всякий случай, когда res завершится, прежде чем я получу настройку обратного вызова. – Dave

+0

@Dave, что не является строго необходимым ([этот ответ] (http://stackoverflow.com/a/11614706/893780) объясняет, почему) :) – robertklep

+0

Спасибо, это делает мне гораздо больше смысла! – Dave

Смежные вопросы