He encontrado a alguien que logra esto con un uso muy inteligente del Image
objeto nativo .
Desde su fuente, esta es la función principal (tiene dependencias en otras partes de la fuente, pero se entiende la idea).
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);
}
}
Esto funciona en todos los tipos de servidores que he probado (servidores web, servidores ftp y servidores de juegos). También funciona con puertos. Si alguien encuentra un caso de uso que falla, publique en los comentarios y actualizaré mi respuesta.
Actualización : se ha eliminado el enlace anterior. Si alguien encuentra o implementa lo anterior, comente y lo agregaré a la respuesta.
Actualización 2 : @trante fue lo suficientemente amable como para proporcionar un jsFiddle.
http://jsfiddle.net/GSSCD/203/
Actualización 3 : @Jonathon creó un repositorio de GitHub con la implementación.
https://github.com/jdfreder/pingjs
Actualización 4 : Parece que esta implementación ya no es confiable. La gente también informa que Chrome ya no lo admite todo, arrojando un net::ERR_NAME_NOT_RESOLVED
error. Si alguien puede verificar una solución alternativa, la pondré como la respuesta aceptada.
"/?cachebreaker="+new Date().getTime();
a al final del img src si es necesario....
. pero como onerror es 'bueno', esto dice que respondióPing es ICMP, pero si hay algún puerto TCP abierto en el servidor remoto, se podría lograr así:
fuente
ping("example.com", "77", function(m){ console.log("It took "+m+" miliseconds."); })
..... llamada de ejemploonreadystatechange
aún no se ha activado . Esto significa que necesita una devolución de llamada para responder cuando cambia el estado.test.zzzzzzzzz
, "77", function (m) {console.log ("Tomó" + m + "milisegundos");}) imprime "Tomó 67 milisegundos". ping (stackoverflow.com
, "80", function (m) {console.log ("Tomó" + m + "milisegundos");}) da un error CORS: developer.mozilla.org/en-US/docs/Web/ HTTP / CORS / Errores / ... No veo cómo puedo verificar con este código si una computadora remota está en línea.puedes probar esto:
coloque ping.html en el servidor con o sin contenido, en javascript haga lo siguiente:
fuente
No puede "hacer ping" directamente en javascript. Puede haber algunas otras formas:
fuente
No puede hacer ping regular en Javascript del navegador, pero puede averiguar si el servidor remoto está vivo, por ejemplo, cargando una imagen desde el servidor remoto. Si la carga falla -> servidor inactivo.
Incluso puede calcular el tiempo de carga utilizando onload-event. Aquí hay un ejemplo de cómo usar el evento onload.
fuente
ping
comandos. Es la fuerza industrial. O bien, hay todo tipo de aplicaciones gratuitas / de código abierto para monitorear si se está ejecutando un host, utilizando varios tipos de controles de latidos.Presentando una solución websocket ...
fuente
isUp();
llamada en elonopen
controlador de eventos? :)isUp();
a la devolución de llamada. O mitigue eso agregando un puerto claramente no websocket-y.Para mantener sus solicitudes rápidas, guarde en caché los resultados del ping del lado del servidor y actualice el archivo o la base de datos de ping cada dos minutos (o la precisión que desee). Puede usar cron para ejecutar un comando de shell con sus 8 pings y escribir la salida en un archivo, el servidor web incluirá este archivo en su vista.
fuente
Si lo que intenta ver es si el servidor "existe", puede usar lo siguiente:
Esto devolverá una indicación de verdadero / falso si el servidor existe.
Si desea tiempo de respuesta, una ligera modificación hará:
El uso es entonces trivial:
O:
fuente
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin
devolución de llamada de éxito nunca se llameEl problema con los pings estándar es que son ICMP, que muchos lugares no dejan pasar por razones de seguridad y tráfico . Eso podría explicar el fracaso.
Ruby anterior a 1.9 tenía un TCP basado
ping.rb
, que se ejecutará con Ruby 1.9+. Todo lo que tiene que hacer es copiarlo de la instalación 1.8.7 a otro lugar. Acabo de confirmar que se ejecutará haciendo ping a mi enrutador doméstico.fuente
Aquí hay muchas respuestas locas y especialmente sobre CORS:
Podrías hacer una solicitud http HEAD (como GET pero sin carga útil). Ver https://ochronus.com/http-head-request-good-uses/
NO necesita una verificación previa, la confusión se debe a una versión anterior de la especificación, consulte ¿Por qué una solicitud HEAD de origen cruzado necesita una verificación previa?
Entonces, podría usar la respuesta anterior que usa la biblioteca jQuery (no lo dijo) pero con
--->
Por supuesto, también puedes usar vanilla js o dojo o lo que sea ...
fuente
No sé qué versión de Ruby está ejecutando, pero ¿ha intentado implementar ping para ruby en lugar de JavaScript? http://raa.ruby-lang.org/project/net-ping/
fuente
ping server.com
sintaxis.si ejecuta esto con el nodo, la consola registraría 200 siempre que Google no esté inactivo.
fuente
usar así:
fuente
Puede ejecutar el comando DOS ping.exe desde javaScript utilizando lo siguiente:
¿Es esto lo que se pidió o me falta algo?
fuente
solo reemplace
con
fuente
Puede ser mucho más fácil que todo eso. Si desea que su página se cargue, verifique la disponibilidad o el contenido de alguna página extranjera para activar otra actividad de la página web, puede hacerlo usando solo javascript y php como este.
yourpage.php
Deberias hacer eso.
El JavaScript activado debe incluir clearInterval (stopmelater)
Avísame si eso funciona para ti
alemán
fuente
Podría intentar usar PHP en su página web ... algo como esto:
Esto no está probado, por lo que puede tener errores tipográficos, etc. pero estoy seguro de que funcionaría. También podría mejorarse ...
fuente