Я нашел кого-то, кто выполняет это с очень умным использованием нативного 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
ошибку. Если кто-то может проверить альтернативное решение, я поставлю это как принятый ответ.
"/?cachebreaker="+new Date().getTime();
в конец img src, если это необходимо....
. но так как onerror «хороший», эта вещь говорит, что она ответилаPing - это ICMP, но если на удаленном сервере есть открытый порт TCP, это можно сделать так:
источник
ping("example.com", "77", function(m){ console.log("It took "+m+" miliseconds."); })
..... пример звонкаonreadystatechange
еще не сработал. Это означает, что вам нужно перезвонить, чтобы забрать, когда состояние меняется.test.zzzzzzzzz
, "77", function (m) {console.log ("Это заняло" + m + "милисекунды.);}) печатает" Это заняло 67 миллисекунд ". ping (stackoverflow.com
, "80", function (m) {console.log ("Это заняло" + m + "милисекунды.");}) выдает ошибку CORS: developer.mozilla.org/en-US/docs/Web/ HTTP / CORS / Errors /… Я не вижу, как проверить этот код, если удаленный компьютер подключен к сети.Вы можете попробовать это:
поместите ping.html на сервер с содержимым или без него, на javascript сделайте то же самое, что и ниже:
источник
Вы не можете напрямую "пинговать" в JavaScript. Там может быть несколько других способов:
источник
Вы не можете выполнять регулярный пинг в браузере Javascript, но вы можете узнать, жив ли удаленный сервер, например, загрузив изображение с удаленного сервера. Если загрузка не удалась -> сервер не работает.
Вы даже можете рассчитать время загрузки с помощью события onload. Вот пример того, как использовать событие onload.
источник
ping
. Это промышленная сила. Или есть все виды бесплатных приложений с открытым исходным кодом, чтобы отслеживать, работает ли хост, используя различные типы проверок сердцебиения.С помощью решения веб-сокета ...
источник
isUp();
вызов не должен быть вonopen
обработчике событий? :)isUp();
этот обратный вызов. Или смягчите это, добавив явно не-websocket-y порт.Чтобы ваши запросы были быстрыми, кэшируйте результаты проверки на стороне сервера и обновляйте файл или базу данных проверки каждые пару минут (или, насколько вы хотите, точнее). Вы можете использовать cron для запуска команды оболочки с вашими 8 пингами и записи вывода в файл, веб-сервер включит этот файл в ваше представление.
источник
Если вы пытаетесь увидеть, существует ли сервер, вы можете использовать следующее:
Это вернет истину / ложь, указав, существует ли сервер.
Если вы хотите время отклика, небольшая модификация сделает:
Использование тогда тривиально:
Или:
источник
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin
и успех обратного вызова никогда не называетсяПроблема со стандартными эхо-запросами заключается в том, что они являются ICMP, который многие места не пропускают по соображениям безопасности и трафика . Это может объяснить неудачу.
Ruby до 1.9 имел TCP-интерфейс
ping.rb
, который будет работать с Ruby 1.9+. Все, что вам нужно сделать, это скопировать его из установки 1.8.7 в другое место. Я только что подтвердил, что он будет работать, пропинговать мой домашний маршрутизатор.источник
Здесь есть много сумасшедших ответов, особенно о CORS -
Вы можете сделать запрос HTTP HEAD (как GET, но без полезной нагрузки). Смотрите https://ochronus.com/http-head-request-good-uses/
Он НЕ нуждается в предварительной проверке, путаница вызвана старой версией спецификации, см. Почему запрос HEAD для разных источников требует предварительной проверки?
Таким образом, вы можете использовать ответ выше, который использует библиотеку jQuery (не сказал это), но с
--->
Конечно, вы также можете использовать Vanilla JS или Dojo или что-то еще ...
источник
Я не знаю, какую версию Ruby вы используете, но вы пытались реализовать ping для ruby вместо javascript? http://raa.ruby-lang.org/project/net-ping/
источник
ping server.com
синтаксис.если вы запустите это с узлом, он будет поддерживать лог 200, пока Google не выключен.
источник
используйте как это:
источник
Вы можете запустить команду DOS ping.exe из javaScript, используя следующую строку:
Это то, о чем просили, или я что-то упустил?
источник
просто замени
с участием
источник
Это может быть намного проще, чем все это. Если вы хотите, чтобы ваша страница загружалась, а затем проверьте доступность или содержимое какой-либо внешней страницы, чтобы вызвать другие действия веб-страницы, вы можете сделать это, используя только javascript и php, как это.
yourpage.php
Это должно сделать это.
Триггерный JavaScript должен включать clearInterval (stopmelater)
Дайте мне знать, если это работает для вас
Джерри
источник
Вы можете попробовать использовать PHP на своей веб-странице ... примерно так:
Это не проверено, поэтому может иметь опечатки и т.д ... но я уверен, что это будет работать. Может быть улучшено тоже ...
источник