Ich habe jemanden gefunden, der dies mit einer sehr geschickten Verwendung des nativen Image
Objekts erreicht.
Von ihrer Quelle aus ist dies die Hauptfunktion (sie hat Abhängigkeiten von anderen Teilen der Quelle, aber Sie bekommen die Idee).
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);
}
}
Dies funktioniert auf allen Arten von Servern, die ich getestet habe (Webserver, FTP-Server und Spieleserver). Es funktioniert auch mit Ports. Wenn jemand auf einen Anwendungsfall stößt, der fehlschlägt, posten Sie bitte in den Kommentaren und ich werde meine Antwort aktualisieren.
Update : Vorheriger Link wurde entfernt. Wenn jemand das oben Gesagte findet oder implementiert, kommentieren Sie es bitte und ich werde es der Antwort hinzufügen.
Update 2 : @trante war nett genug, um eine jsFiddle bereitzustellen.
http://jsfiddle.net/GSSCD/203/
Update 3 : @Jonathon hat mit der Implementierung ein GitHub-Repo erstellt.
https://github.com/jdfreder/pingjs
Update 4 : Es sieht so aus, als ob diese Implementierung nicht mehr zuverlässig ist. Die Leute berichten auch, dass Chrome nicht mehr alles unterstützt und einen net::ERR_NAME_NOT_RESOLVED
Fehler auslöst. Wenn jemand eine alternative Lösung überprüfen kann, werde ich dies als akzeptierte Antwort angeben.
"/?cachebreaker="+new Date().getTime();
bei Bedarf ein an das Ende des img src angehängt wird....
. aber da onerror 'gut' ist, sagt dieses Ding, dass es geantwortet hatPing ist ICMP, aber wenn auf dem Remote-Server ein offener TCP-Port vorhanden ist, kann dies folgendermaßen erreicht werden:
quelle
ping("example.com", "77", function(m){ console.log("It took "+m+" miliseconds."); })
..... Beispiel Anrufonreadystatechange
noch nicht ausgelöst. Dies bedeutet, dass Sie einen Rückruf benötigen, um den Status zu ändern.test.zzzzzzzzz
, "77", function (m) {console.log ("Es hat" + m + "Millisekunden gedauert.");}) druckt "Es hat 67 Millisekunden gedauert." ping (stackoverflow.com
, "80", function (m) {console.log ("Es hat" + m + "Millisekunden gedauert.");}) gibt einen CORS-Fehler aus: developer.mozilla.org/en-US/docs/Web/ HTTP / CORS / Errors /… Ich sehe nicht, wie ich mit diesem Code überprüfen kann, ob ein Remotecomputer online ist.Sie können dies versuchen:
setzen ping.html auf dem Server mit oder ohne Inhalt, auf dem Javascript tut selber wie unten:
quelle
Sie können nicht direkt in Javascript "pingen". Es kann einige andere Möglichkeiten geben:
quelle
Sie können im Browser-Javascript kein reguläres Ping durchführen, aber Sie können herausfinden, ob der Remote-Server aktiv ist, indem Sie beispielsweise ein Image vom Remote-Server laden. Wenn das Laden fehlschlägt -> Server heruntergefahren.
Sie können die Ladezeit sogar mithilfe des Onload-Ereignisses berechnen. Hier ist ein Beispiel für die Verwendung des Onload-Ereignisses.
quelle
ping
Befehlszeilenbefehl nutzen. Es ist industrielle Stärke. Oder es gibt alle Arten von kostenlosen / Open-Source-Apps, mit denen mithilfe verschiedener Arten von Heartbeat-Checks überwacht werden kann, ob ein Host ausgeführt wird.Mit einer Websocket-Lösung einsteigen ...
quelle
isUp();
Anruf nicht imonopen
Event-Handler sein? :)isUp();
. Oder verringern Sie dies, indem Sie einen eindeutig nicht Websocket-y-Port hinzufügen.Um Ihre Anforderungen schnell zu halten, speichern Sie die serverseitigen Ergebnisse des Pings zwischen und aktualisieren Sie die Ping-Datei oder -Datenbank alle paar Minuten (oder wie genau Sie dies wünschen). Sie können cron verwenden, um einen Shell-Befehl mit Ihren 8 Pings auszuführen und die Ausgabe in eine Datei zu schreiben. Der Webserver wird diese Datei in Ihre Ansicht aufnehmen.
quelle
Wenn Sie versuchen zu sehen, ob der Server "existiert", können Sie Folgendes verwenden:
Dies gibt eine wahr / falsch-Angabe zurück, ob der Server vorhanden ist.
Wenn Sie eine Antwortzeit wünschen, reicht eine geringfügige Änderung aus:
Die Verwendung ist dann trivial:
Oder:
quelle
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin
und Erfolg Rückruf wird nie genanntDas Problem mit Standard-Pings ist, dass es sich um ICMP handelt, die an vielen Stellen aus Sicherheits- und Verkehrsgründen nicht durchgelassen werden . Das könnte den Fehler erklären.
Ruby vor 1.9 hatte eine TCP-basierte
ping.rb
Version, die mit Ruby 1.9+ ausgeführt werden kann. Sie müssen es lediglich von der 1.8.7-Installation an einen anderen Ort kopieren. Ich habe gerade bestätigt, dass es ausgeführt wird, indem ich meinen Heimrouter anpinge.quelle
Hier gibt es viele verrückte Antworten und besonders zu CORS -
Sie können eine http HEAD-Anforderung ausführen (wie GET, jedoch ohne Nutzlast). Siehe https://ochronus.com/http-head-request-good-uses/
Es ist KEINE Preflight-Prüfung erforderlich. Die Verwirrung ist auf eine alte Version der Spezifikation zurückzuführen. Siehe Warum benötigt eine HEAD-Anforderung mit Ursprung im Ursprung eine Preflight-Prüfung?
Sie könnten also die obige Antwort verwenden, die die jQuery-Bibliothek verwendet (hat es nicht gesagt), aber mit
--->
Natürlich können Sie auch Vanille js oder Dojo oder was auch immer verwenden ...
quelle
Ich weiß nicht, welche Version von Ruby Sie ausführen, aber haben Sie versucht, Ping für Ruby anstelle von Javascript zu implementieren? http://raa.ruby-lang.org/project/net-ping/
quelle
ping server.com
Syntax zu verwenden.Wenn Sie dies mit Node ausführen, wird das Protokoll 200 konsolidiert, solange Google nicht inaktiv ist.
quelle
Verwendung wie folgt:
quelle
Sie können den DOS-Befehl ping.exe über JavaScript wie folgt ausführen:
Wurde danach gefragt oder fehlt mir etwas?
quelle
einfach ersetzen
mit
quelle
Es könnte viel einfacher sein als das alles. Wenn Sie möchten, dass Ihre Seite geladen wird, überprüfen Sie die Verfügbarkeit oder den Inhalt einer fremden Seite, um andere Webseitenaktivitäten auszulösen. Sie können dies nur mit Javascript und PHP wie diesem tun.
yourpage.php
Das sollte es tun.
Das ausgelöste Javascript sollte clearInterval (stopmelater) enthalten.
Lassen Sie mich wissen, ob das für Sie funktioniert
Jerry
quelle
Sie könnten versuchen, PHP auf Ihrer Webseite zu verwenden ... ungefähr so:
Dies ist nicht getestet, so dass es Tippfehler usw. geben kann ... aber ich bin zuversichtlich, dass es funktionieren würde. Könnte auch verbessert werden ...
quelle