Страницы

Поиск по вопросам

пятница, 5 июля 2019 г.

JS PING серверов

Доброго всем Пол дня мучаюсь с решением одного вопроса. Есть список пулов для майнинга, надо определить пинг до серверов. Пинг должен быть с 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

Комментариев нет:

Отправить комментарий