На буржуйском форуме подсказали как решить первую проблему, вот код:
var http = require("http");
var req_total = 10,
req_per_sec = 30,
i = 0;
var intervalID = setInterval(function timerik() {
// Create a new local variable bound to this closure's invocation's scope.
var j = ++i;
if(j == req_total){
clearInterval(intervalID); //end of Life
}
console.log(j); //write to console task number
console.time(j +' latency');
http.get("http://www.yandex.ru", function (response){
console.log(j +" result = " + response.statusCode); //write to console task number and statusCode
console.timeEnd(j +' latency'); //write to console operation timeout
});
}, 1000/req_per_sec);
В общем все просто, сделали переменную J в которую будет сохранятся идентификатор i, при этом переменная будет не такая глобальная как первая. Теперь результаты запросов будут нормально отображаться. По второй проблеме все глухо, получаю ответ не по всем запросам, а лишь по некоторым из них, остальная часть продолжает теряться.:
"C:\Program Files\nodejs\node.exe" run4.js
1
2
3
1 result = 200
1 latency: 111ms
4
2 result = 200
2 latency: 95ms
5
3 result = 200
3 latency: 99ms
6
4 result = 200
4 latency: 109ms
7
5 result = 200
5 latency: 105ms
8
9
10
Process finished with exit code 0
Как мы видим результат есть только с 1ого по 5ый, оставшиеся запросы продолжают теряться из-за того что приложение перестает обрабатываться.