я хочу, чтобы вычислить ответ время для каждого прокси-запроса, сделанного узел-HTTP-прокси, как это:Как получить время отклика каждого прокси-запроса, выполняемого node-http-proxy?
var httpProxy = require('http-proxy');
var proxy = httpProxy.createProxyServer();
require('http').createServer(function(req, res) {
// start-time for one request
proxy.web(req, res, { target: 'localhost:80' });
}).listen(3000);
proxy.on('proxyRes', function (res) {
// end-time for one request to calculate the time
console.log('RAW Response from the target', JSON.stringify(res.headers, true, 2));
});
, поэтому я хочу, чтобы получить временную разницу между начальным временем и лор время. я могу поймать событие proxyRes
, но как совместить прокси-ответ с правильным запросом клиента?
обновление: я попытался следующие:
var httpProxy = require('http-proxy');
var http = require('http');
var proxy = new httpProxy.createProxyServer({
target: {
host: 'localhost',
port: 80
}
});
var start_time = 0;
var proxyServer = http.createServer(function (req, res) {
start_time = new Date().getTime();
proxy.web(req, res);
res.on('finish', function() {
console.log("The request was proxied in " + (new Date().getTime() - start_time) + "ms");
});
});
proxyServer.listen(3000);
// Proxy-Target server
var n = 0; sleep = 0;
http.createServer(function (req, res) {
n++;
var start_time = new Date().getTime();
res.writeHead(200, {'Content-Type': 'text/plain'});
if (n % 2 == 0){
sleep = 2000;
} else {
sleep = 5000;
}
setTimeout(function(){
res.end("...");
}, sleep);
res.on('finish', function(d) {
var diff_time = new Date().getTime() - start_time;
console.log("The request was processed in " + (new Date().getTime() - start_time) + "ms");
});
}).listen(80);
так, время-мишени сервера измеряется правильно, вызывает один запрос может длиться либо 2 Одера 5 секунд, но меры прокси иногда отклика раза всего лишь несколько миллисекунд. Я попробовал его с помощью Apache-скамья, как: ab -n 10 -c 3 http://localhost:3000/
и результат консоли:
The request was processed in 2007ms
The request was proxied in 2017ms
The request was processed in 2003ms
The request was proxied in 2006ms
The request was processed in 5002ms
The request was processed in 5001ms
The request was proxied in 980ms
The request was proxied in 981ms
The request was processed in 2002ms
The request was proxied in 2006ms
The request was processed in 2002ms
The request was proxied in 2005ms
The request was processed in 5000ms
The request was proxied in 8ms
The request was processed in 5000ms
The request was proxied in 982ms
The request was processed in 2001ms
The request was proxied in 2005ms
The request was processed in 5002ms
The request was proxied in 4998ms
не могли бы вы просто использовать 'новый Date() GetTime()' и регистрировать разницу? – brandonscript
Я так не думаю, потому что прокси работает асинхронно, поэтому мне нужно сопоставить запрос прокси-сервера на связанный с ним ответ. и поэтому я должен каким-то образом идентифицировать один запрос. – chris
Скрипт выполняется асинхронно, но прокси не похож на него. Вы должны быть в состоянии поставить оба в обратном вызове (после получения ответа) и измерить его таким образом. – brandonscript