Я нашел кого-то, кто выполняет это с очень умным использованием нативного объекта 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);
}
}
Это работает на всех типах серверов, которые яПротестировано (веб-серверы, FTP-серверы и игровые серверы).Это также работает с портами.Если у кого-нибудь возникнет сбой в использовании, напишите в комментариях, и я обновлю свой ответ.
Обновление : Предыдущая ссылка была удалена.Если кто-то найдет или реализует вышеизложенное, пожалуйста, прокомментируйте, и я добавлю его в ответ.
Обновление 2 : @trante был достаточно хорош, чтобы предоставить jsFiddle.
http://jsfiddle.net/GSSCD/203/
Обновление 3 : @Jonathon создал репозиторий GitHub с реализацией.
https://github.com/jdfreder/pingjs
Обновление 4 : похоже, что эта реализация больше не является надежной.Люди также сообщают, что Chrome больше не поддерживает все это, выдавая ошибку net::ERR_NAME_NOT_RESOLVED
.Если кто-то может проверить альтернативное решение, я поставлю его в качестве принятого ответа.