Znalazłem kogoś, kto osiąga to dzięki bardzo sprytnemu wykorzystaniu natywnego Image
obiektu.
Z ich źródła jest to główna funkcja (ma zależności od innych części źródła, ale masz pomysł).
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);
}
}
Działa to na wszystkich typach serwerów, które testowałem (serwery WWW, serwery ftp i serwery gier). Działa również z portami. Jeśli ktoś napotka przypadek użycia, który się nie powiedzie, napisz w komentarzach, a zaktualizuję moją odpowiedź.
Aktualizacja : poprzedni link został usunięty. Jeśli ktoś znajdzie lub zastosuje powyższe, proszę o komentarz, a ja dodam to do odpowiedzi.
Aktualizacja 2 : @trante było na tyle miłe, aby zapewnić jsFiddle.
http://jsfiddle.net/GSSCD/203/
Aktualizacja 3 : @Jonathon utworzył repozytorium GitHub z implementacją.
https://github.com/jdfreder/pingjs
Aktualizacja 4 : Wygląda na to, że ta implementacja nie jest już niezawodna. Ludzie zgłaszają również, że Chrome nie obsługuje już tego wszystkiego, wyrzucając net::ERR_NAME_NOT_RESOLVED
błąd. Jeśli ktoś może zweryfikować alternatywne rozwiązanie, umieszczę je jako zaakceptowaną odpowiedź.
"/?cachebreaker="+new Date().getTime();
na końcu img src, jeśli to konieczne....
. ale ponieważ onerror jest „dobry”, ta rzecz mówi, że odpowiedziałaPing to ICMP, ale jeśli na zdalnym serwerze jest otwarty port TCP, można to osiągnąć w następujący sposób:
źródło
ping("example.com", "77", function(m){ console.log("It took "+m+" miliseconds."); })
..... przykładowa rozmowaonreadystatechange
nie została jeszcze uruchomiona . Oznacza to, że potrzebujesz oddzwonienia, aby odebrać, gdy zmieni się stan.test.zzzzzzzzz
, "77", function (m) {console.log ("Zajęło to" + m + "milisekund.");}) wyświetla "Zajęło to 67 milisekund." ping (stackoverflow.com
, "80", function (m) {console.log ("To zajęło" + m + "milisekund.");}) daje błąd CORS: developer.mozilla.org/en-US/docs/Web/ HTTP / CORS / Errors /… Nie widzę, jak mogę sprawdzić tym kodem, czy zdalny komputer jest online.możesz spróbować tego:
umieść ping.html na serwerze z treścią lub bez, w javascript zrób to samo, co poniżej:
źródło
Nie możesz bezpośrednio „pingować” w javascript. Może być kilka innych sposobów:
źródło
Nie możesz wykonać zwykłego pingowania w Javascript przeglądarki, ale możesz sprawdzić, czy zdalny serwer działa, na przykład ładując obraz ze zdalnego serwera. Jeśli ładowanie się nie powiedzie -> serwer nie działa.
Możesz nawet obliczyć czas ładowania za pomocą zdarzenia onload. Oto przykład użycia zdarzenia onload.
źródło
ping
polecenia. To siła przemysłowa. Lub istnieją różnego rodzaju bezpłatne / otwarte aplikacje do monitorowania, czy host jest uruchomiony, przy użyciu różnych rodzajów kontroli pulsu.Dołączanie do rozwiązania Websocket ...
źródło
isUp();
połączenie nie powinno być wonopen
module obsługi zdarzeń? :)isUp();
do tego wywołania zwrotnego. Lub złagodzić to, dodając wyraźnie inny port sieciowy-y.Aby żądania były szybkie, buforuj wyniki polecenia ping po stronie serwera i aktualizuj plik ping lub bazę danych co kilka minut (lub jakkolwiek chcesz, aby była dokładna). Możesz użyć crona, aby uruchomić polecenie powłoki z 8 pingami i zapisać wynik do pliku, serwer sieciowy włączy ten plik do twojego widoku.
źródło
Jeśli próbujesz sprawdzić, czy serwer „istnieje”, możesz użyć następującego:
To zwróci prawdę / fałsz wskazujące, czy serwer istnieje.
Jeśli chcesz uzyskać czas odpowiedzi, wystarczy niewielka modyfikacja:
Użycie jest wtedy trywialne:
Lub:
źródło
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin
i sukces oddzwonienia nigdy nie jest wywoływanyProblem ze standardowymi pingami polega na tym, że są to ICMP, przez które wiele miejsc nie przepuszcza ze względów bezpieczeństwa i ruchu . To może wyjaśniać niepowodzenie.
Ruby przed 1.9 miał oparty na TCP
ping.rb
, który będzie działał z Ruby 1.9+. Wszystko, co musisz zrobić, to skopiować go z instalacji 1.8.7 do innego miejsca. Właśnie potwierdziłem, że będzie działać, wysyłając polecenie ping do mojego domowego routera.źródło
Jest tu wiele szalonych odpowiedzi, a zwłaszcza dotyczących CORS -
Możesz wykonać żądanie HTTP HEAD (jak GET, ale bez ładunku). Zobacz https://ochronus.com/http-head-request-good-uses/
NIE wymaga kontroli wstępnej, zamieszanie jest spowodowane starą wersją specyfikacji, zobacz Dlaczego żądanie HEAD z innych źródeł wymaga kontroli wstępnej?
Więc możesz użyć powyższej odpowiedzi, która używa biblioteki jQuery (nie powiedział tego), ale z
--->
Oczywiście możesz także użyć vanilla js, dojo lub cokolwiek innego ...
źródło
Nie wiem, jakiej wersji Rubiego używasz, ale czy próbowałeś zaimplementować ping dla Rubiego zamiast javascript? http://raa.ruby-lang.org/project/net-ping/
źródło
ping server.com
składni.jeśli uruchomisz to z węzłem, konsola zarejestruje 200, o ile Google nie jest wyłączone.
źródło
użyj w ten sposób:
źródło
Polecenie ping.exe dla systemu DOS można uruchomić z poziomu javaScript w następujący sposób:
Czy o to proszono, czy czegoś mi brakuje?
źródło
po prostu wymień
z
źródło
To może być o wiele łatwiejsze niż to wszystko. Jeśli chcesz, aby Twoja strona się załadowała, sprawdź dostępność lub zawartość jakiejś obcej strony, aby wywołać inną aktywność na stronie internetowej, możesz to zrobić za pomocą tylko javascript i php, takiego jak ten.
yourpage.php
Że należy to zrobić.
Uruchomiony skrypt javascript powinien zawierać clearInterval (stopmelater)
Daj mi znać, jeśli to działa dla Ciebie
Nocnik
źródło
Możesz spróbować użyć PHP na swojej stronie internetowej ... coś takiego:
To nie jest testowane, więc może zawierać literówki itp ... ale jestem pewien, że zadziała. Można by też poprawić ...
źródło