Eu encontrei alguém que realiza isso com um uso muito inteligente do Image
objeto nativo .
Da fonte deles, essa é a função principal (ela depende de outras partes da fonte, mas você entendeu).
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);
}
}
Isso funciona em todos os tipos de servidores que eu testei (servidores web, servidores ftp e servidores de jogos). Também funciona com portas. Se alguém encontrar um caso de uso que falhar, poste nos comentários e eu atualizarei minha resposta.
Atualização : o link anterior foi removido. Se alguém encontrar ou implementar o acima, comente e eu o adicionarei na resposta.
Atualização 2 : @trante foi bom o suficiente para fornecer um jsFiddle.
http://jsfiddle.net/GSSCD/203/
Atualização 3 : o @Jonathon criou um repositório do GitHub com a implementação.
https://github.com/jdfreder/pingjs
Atualização 4 : Parece que esta implementação não é mais confiável. As pessoas também estão relatando que o Chrome não suporta mais tudo, gerando um net::ERR_NAME_NOT_RESOLVED
erro. Se alguém puder verificar uma solução alternativa, colocarei isso como a resposta aceita.
"/?cachebreaker="+new Date().getTime();
a ao final do img src, se necessário....
. mas desde onerror é 'bom' essa coisa diz que respondeuO ping é ICMP, mas se houver alguma porta TCP aberta no servidor remoto, isso pode ser alcançado da seguinte maneira:
fonte
ping("example.com", "77", function(m){ console.log("It took "+m+" miliseconds."); })
..... chamada de exemploonreadystatechange
ainda não foi acionado. Isso significa que você precisa de um retorno de chamada para atender quando o estado mudar.test.zzzzzzzzz
, "77", function (m) {console.log ("Demorou" + m + "milissegundos.");}) imprime "Demorou 67 milissegundos". ping (stackoverflow.com
, "80", function (m) {console.log ("Demorou" + m + "milissegundos.");}) fornece um erro de CORS: developer.mozilla.org/en-US/docs/Web/ HTTP / CORS / Erros /… Não vejo como posso verificar com este código se um computador remoto está online.você pode tentar isso:
coloque ping.html no servidor com ou sem conteúdo, no javascript faça o mesmo que abaixo:
fonte
Você não pode "pingar" diretamente em javascript. Pode haver algumas outras maneiras:
fonte
Você não pode executar ping regularmente no Javascript do navegador, mas pode descobrir se o servidor remoto está ativo, carregando, por exemplo, uma imagem do servidor remoto. Se o carregamento falhar -> servidor inoperante.
Você pode até calcular o tempo de carregamento usando onload-event. Aqui está um exemplo de como usar o evento onload.
fonte
ping
comandos. É força industrial. Ou, há todos os tipos de aplicativos de código aberto / gratuitos para monitorar se um host está sendo executado, usando vários tipos de verificações de pulsação.Apresentando uma solução websocket ...
fonte
isUp();
chamada não deveria estar noonopen
manipulador de eventos? :)isUp();
esse retorno de chamada. Ou reduza isso adicionando uma porta distintamente não-websocket-y.Para manter suas solicitações rápidas, armazene em cache os resultados do ping no servidor e atualize o arquivo ou o banco de dados ping a cada dois minutos (ou por mais preciso que você queira). Você pode usar o cron para executar um comando shell com seus 8 pings e gravar a saída em um arquivo, o servidor da Web incluirá esse arquivo em sua visualização.
fonte
Se o que você está tentando ver é se o servidor "existe", você pode usar o seguinte:
Isso retornará uma indicação verdadeira / falsa se o servidor existe.
Se você deseja tempo de resposta, uma pequena modificação fará:
O uso é então trivial:
Ou:
fonte
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin
e sucesso callback nunca é chamadoO problema dos pings padrão é que eles são ICMP, que muitos lugares não deixam passar por razões de segurança e tráfego . Isso pode explicar o fracasso.
O Ruby anterior ao 1.9 tinha um baseado em TCP
ping.rb
, que será executado com o Ruby 1.9+. Tudo o que você precisa fazer é copiá-lo da instalação 1.8.7 para outro lugar. Acabei de confirmar que seria executado executando ping no meu roteador doméstico.fonte
Há muitas respostas loucas aqui e especialmente sobre o CORS -
Você pode fazer uma solicitação http HEAD (como GET, mas sem carga útil). Consulte https://ochronus.com/http-head-request-good-uses/
NÃO precisa de uma verificação prévia, a confusão ocorre devido a uma versão antiga da especificação, consulte Por que uma solicitação HEAD de origem cruzada precisa de uma verificação prévia?
Então você pode usar a resposta acima, que está usando a biblioteca jQuery (não disse), mas com
--->
Claro que você também pode usar vanilla js ou dojo ou qualquer outra coisa ...
fonte
Não sei qual versão do Ruby você está executando, mas você tentou implementar o ping para ruby em vez de javascript? http://raa.ruby-lang.org/project/net-ping/
fonte
ping server.com
sintaxe.se você executar isso com o nó, o console 200 será registrado, desde que o google não esteja inativo.
fonte
use assim:
fonte
Você pode executar o comando DOS ping.exe no javaScript usando o seguinte:
Foi isso que foi solicitado ou estou faltando alguma coisa?
fonte
apenas substitua
com
fonte
Pode ser muito mais fácil do que tudo isso. Se você deseja que sua página carregue, verifique a disponibilidade ou o conteúdo de alguma página estrangeira para acionar outras atividades da página da web, você pode fazê-lo usando apenas javascript e php como este.
yourpage.php
Isso deve resolver.
O javascript acionado deve incluir clearInterval (stopmelater)
Deixe-me saber se isso funciona para você
Jerry
fonte
Você pode tentar usar PHP na sua página da Web ... algo como isto:
Isso não foi testado, portanto pode haver erros de digitação, etc ... mas estou confiante de que funcionaria. Poderia ser melhorado também ...
fonte