Показать сообщение отдельно
  #1 (permalink)  
Старый 25.03.2015, 12:47
Аватар для MrVik
Новичок на форуме
Отправить личное сообщение для MrVik Посмотреть профиль Найти все сообщения от MrVik
 
Регистрация: 25.03.2015
Сообщений: 4

Создание сервиса измерения отзывчивости веб сервера
Всем добрый день.
По долгу службы появилась потребность проверять доступность веб сервера, а именно замерять время ответа.
Сделал своеобразный 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 проблемы?

Последний раз редактировалось MrVik, 25.03.2015 в 13:00.
Ответить с цитированием