Всем добрый день.
По долгу службы появилась потребность проверять доступность веб сервера, а именно замерять время ответа.
Сделал своеобразный jmeter на node, но столкнулся с парой трудностей.
var http = require("http");
var req_total = 10,
req_per_sec = 30,
i = 0;
var intervalID = setInterval(function timerik() {
i++;
console.log(i); //write to console task number
console.time(i + ' latency');
if(i == req_total){
clearInterval(intervalID); //end of Life
}
http.get("http://www.yandex.ru", function (response){
console.log(i +" result = " + response.statusCode); //write to console task number and statusCode
console.timeEnd(i +' latency'); //write to console operation timeout
});
}, 1000/req_per_sec);
При выполнении получаем следующее:
"C:\Program Files\nodejs\node.exe" run4.js
1
2
3
3 result = 200
3 latency: 24ms
4
4 result = 200
4 latency: 11ms
4 result = 200
4 latency: 43ms
5
6
6 result = 200
6 latency: 12ms
7
7 result = 200
7 latency: 8ms
8
9
10
Process finished with exit code 0
1ая из этих проблем заключается в том что номер выполнения операции не всегда совпадет с действительным номером вызова, к примеру в результате можем увидеть это в 8-11 строках результата. Я предполагаю что это связано с вызовом http метода который в момент отправки результата использует идентификатор текущей сессии. наверное это можно будет исправить передачей аргумента сессии внутрь функции, но как это сделать я не понимаю.
2ая проблема заключается в том что отображается результат не всех запросов. Скорей всего это связано с тем что запросы не успевают отработать до момента окончания цикла в setinterval. И после его окончания приложение перестает работать и соответственно результат уже не доходит.Я предполагаю что эту проблему можно исправить сделав сервис который будет следить за открытыми соединениями, но я не представляю как это сделать и не уверен что это действительно правильное решение.
Подскажите как можно решить эти 2 проблемы?