Доброго всем
Пол дня мучаюсь с решением одного вопроса.
Есть список пулов для майнинга, надо определить пинг до серверов. Пинг должен быть с IP пользователя до IP сервера, т.е. с моего сервера не пойдет, поэтому пришел к JS.
После долгих поисков соорудил такую констукцию:
to_host ='http://5.9.6.228';
timeStart = new Date().getTime();
$.get(to_host).error(function (){
ping_time = new Date().getTime() - timeStart;
ping_time_sec = ping_time;
document.write(''+ num +' Ping '+ to_host +' OK. Time '+ ping_time_sec + ' msec.
' );
})
Скрипт в консоли вываливает ошибку:
XMLHttpRequest cannot load http://5.9.6.228/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access.
Но при этом получает ответ от сервера и я могу измерить это время.
Можно ли считать полученное время временем PINGа в привычном понимании?
Если совсем нет, подскажите решение, задолбался искать. Спасибо)
Ответ
На SO предлагают использовать нативный Image для проверки связи.
Кусок кода, из которого понятна идея:
function Pinger_ping(ip, callback) {
if(!this.inUse) {
this.inUse = true;
this.callback = callback
this.ip = ip;
var _that = this;
this.img = new Image();
this.img.onload = function() {_that.good();};
this.img.onerror = function() {_that.good();};
this.start = new Date().getTime();
this.img.src = "http://" + ip;
this.timer = setTimeout(function() { _that.bad();}, 1500);
}
}
Часть времени в первый запрос уйдет на разрешение имени в ip, поэтому для имен лучше измерять повторный запрос, когда ip закэширован.
fiddle
Комментариев нет:
Отправить комментарий