Можно ли пинговать сервер из Javascript? - PullRequest
139 голосов
/ 26 ноября 2010

Я создаю веб-приложение, которое требует проверки наличия удаленных серверов в сети или нет.Когда я запускаю его из командной строки, моя страница загружается на целых 60 секунд (для 8 записей она будет линейно масштабироваться с увеличением).

Я решил пойти по пути пинга на стороне пользователя.Таким образом, я могу загрузить страницу и просто попросить их подождать, пока «сервер подключен» к данным, просматривая мой контент.

Если у кого-то есть ответ на поставленный выше вопрос, или если он знает решение для сохранениямоя страница загружается быстро, я бы определенно это оценил.

Ответы [ 16 ]

0 голосов
/ 14 марта 2018
let webSite = 'https://google.com/' 
https.get(webSite, function (res) {
    // If you get here, you have a response.
    // If you want, you can check the status code here to verify that it's `200` or some other `2xx`.
    console.log(webSite + ' ' + res.statusCode)
}).on('error', function(e) {
    // Here, an error occurred.  Check `e` for the error.
    console.log(e.code)
});;

если вы запустите это с узлом, он будет поддерживать лог 200, пока Google не выключен.

0 голосов
/ 18 сентября 2013

Вы можете запустить команду DOS ping.exe из javaScript, используя следующую строку:

function ping(ip)
{
    var input = "";
    var WshShell = new ActiveXObject("WScript.Shell");
    var oExec = WshShell.Exec("c:/windows/system32/ping.exe " + ip);

    while (!oExec.StdOut.AtEndOfStream)
    {
            input += oExec.StdOut.ReadLine() + "<br />";
    }
    return input;
}

Это то, о чем просили, или я что-то упустил?

0 голосов
/ 23 марта 2012

просто замените

file_get_contents

на

$ip = $_SERVER['xxx.xxx.xxx.xxx'];
exec("ping -n 4 $ip 2>&1", $output, $retval);
if ($retval != 0) { 
  echo "no!"; 
} 
else{ 
  echo "yes!"; 
}
0 голосов
/ 23 марта 2012

Это может быть намного проще, чем все это.Если вы хотите, чтобы ваша страница загружалась, то проверьте доступность или содержимое какой-либо внешней страницы, чтобы вызвать другие действия веб-страницы, вы можете сделать это, используя только javascript и php, как это.

yourpage.php

<?php
if (isset($_GET['urlget'])){
  if ($_GET['urlget']!=''){
    $foreignpage= file_get_contents('http://www.foreignpage.html');
    // you could also use curl for more fancy internet queries or if http wrappers aren't active in your php.ini
    // parse $foreignpage for data that indicates your page should proceed
    echo $foreignpage; // or a portion of it as you parsed
    exit();  // this is very important  otherwise you'll get the contents of your own page returned back to you on each call
  }
}
?>

<html>
  mypage html content
  ...

<script>
var stopmelater= setInterval("getforeignurl('?urlget=doesntmatter')", 2000);

function getforeignurl(url){
  var handle= browserspec();
  handle.open('GET', url, false);
  handle.send();
  var returnedPageContents= handle.responseText;
  // parse page contents for what your looking and trigger javascript events accordingly.
  // use handle.open('GET', url, true) to allow javascript to continue executing. must provide a callback function to accept the page contents with handle.onreadystatechange()
}
function browserspec(){
  if (window.XMLHttpRequest){
    return new XMLHttpRequest();
  }else{
    return new ActiveXObject("Microsoft.XMLHTTP");
  }
}

</script>

Это должно сделать это.

Запускаемый JavaScript должен включать clearInterval (stopmelater)

Дайте мне знать, если это работаетдля тебя

Джерри

0 голосов
/ 26 ноября 2010

Вы можете попробовать использовать PHP на своей веб-странице ... примерно так:

<html><body>
<form method="post" name="pingform" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<h1>Host to ping:</h1>
<input type="text" name="tgt_host" value='<?php echo $_POST['tgt_host']; ?>'><br>
<input type="submit" name="submit" value="Submit" >
</form></body>
</html>
<?php

$tgt_host = $_POST['tgt_host'];
$output = shell_exec('ping -c 10 '. $tgt_host.');

echo "<html><body style=\"background-color:#0080c0\">
<script type=\"text/javascript\" language=\"javascript\">alert(\"Ping Results: " . $output . ".\");</script>
</body></html>";

?>

Это не проверено, поэтому может иметь опечатки и т.д. ... но я уверен, что это будет работать.Может быть улучшено тоже ...

0 голосов
/ 26 ноября 2010

Я не знаю, какую версию Ruby вы используете, но вы пытались реализовать ping для ruby ​​вместо javascript? http://raa.ruby -lang.org / проект / сеть-пинг /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...