Saya telah menemukan seseorang yang menyelesaikan ini dengan penggunaan Image
objek asli yang sangat pintar .
Dari sumbernya, ini adalah fungsi utama (memiliki ketergantungan pada bagian lain dari sumber tetapi Anda mendapatkan ide).
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);
}
}
Ini berfungsi pada semua jenis server yang telah saya uji (server web, server ftp, dan server game). Ini juga berfungsi dengan port. Jika ada yang menemukan kasus penggunaan yang gagal, silakan kirim komentar dan saya akan memperbarui jawaban saya.
Pembaruan : Tautan sebelumnya telah dihapus. Jika ada yang menemukan atau mengimplementasikan hal di atas, silakan komentar dan saya akan menambahkannya ke dalam jawabannya.
Pembaruan 2 : @trante cukup baik untuk menyediakan jsFiddle.
http://jsfiddle.net/GSSCD/203/
Pembaruan 3 : @ Jonathon membuat repo GitHub dengan implementasinya.
https://github.com/jdfreder/pingjs
Pembaruan 4 : Sepertinya implementasi ini tidak lagi dapat diandalkan. Orang-orang juga melaporkan bahwa Chrome tidak lagi mendukung semuanya, membuat net::ERR_NAME_NOT_RESOLVED
kesalahan. Jika seseorang dapat memverifikasi solusi alternatif saya akan menempatkan itu sebagai jawaban yang diterima.
"/?cachebreaker="+new Date().getTime();
ke akhir img src jika perlu....
. tetapi karena satu kesalahan adalah 'baik' hal ini dikatakan meresponPing adalah ICMP, tetapi jika ada port TCP terbuka pada server jarak jauh itu dapat dicapai seperti ini:
sumber
ping("example.com", "77", function(m){ console.log("It took "+m+" miliseconds."); })
..... contoh panggilanonreadystatechange
belum dipecat. Ini berarti Anda memerlukan panggilan balik untuk mengambil ketika keadaan berubah.test.zzzzzzzzz
, "77", function (m) {console.log ("Butuh" + m + "miliseconds.");}) mencetak "Butuh 67 miliseconds." ping (stackoverflow.com
, "80", function (m) {console.log ("Butuh" + m + "miliseconds.");}) memberikan CORS-Error: developer.mozilla.org/en-US/docs/Web/ HTTP / CORS / Kesalahan / ... Saya tidak melihat bagaimana saya dapat memeriksa dengan kode ini jika komputer jarak jauh sedang online.Anda dapat mencoba ini:
letakkan ping.html di server dengan atau tanpa konten apa pun, pada javascript lakukan hal yang sama seperti di bawah ini:
sumber
Anda tidak dapat "ping" secara langsung dalam javascript. Mungkin ada beberapa cara lain:
sumber
Anda tidak dapat melakukan ping biasa di browser Javascript, tetapi Anda dapat mengetahui apakah server jauh masih hidup dengan misalnya memuat gambar dari server jauh. Jika memuat gagal -> server turun.
Anda bahkan dapat menghitung waktu pemuatan dengan menggunakan onload-event. Berikut adalah contoh cara menggunakan acara onload.
sumber
ping
. Ini kekuatan industri. Atau, ada segala macam aplikasi gratis / sumber terbuka untuk dipantau jika host berjalan, menggunakan berbagai jenis pemeriksaan detak jantung.Masuk dengan solusi websocket ...
sumber
isUp();
panggilan itu ada dalamonopen
event handler? :)isUp();
ke callback itu. Atau kurangi dengan menambahkan port non-websocket-y yang jelas.Untuk menjaga agar permintaan Anda tetap cepat, cache hasil sisi server dari ping dan perbarui file ping atau database setiap beberapa menit (atau betapapun akuratnya Anda inginkan). Anda dapat menggunakan cron untuk menjalankan perintah shell dengan 8 ping Anda dan menulis hasilnya menjadi file, server web akan memasukkan file ini ke dalam tampilan Anda.
sumber
Jika yang ingin Anda lihat adalah apakah server "ada", Anda dapat menggunakan yang berikut:
Ini akan mengembalikan indikasi benar / salah apakah server ada.
Jika Anda ingin waktu respons, sedikit modifikasi akan dilakukan:
Penggunaannya kemudian sepele:
Atau:
sumber
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin
dan keberhasilan callback tidak pernah disebutMasalah dengan ping standar adalah mereka ICMP, yang banyak tempat tidak membiarkan karena alasan keamanan dan lalu lintas . Itu mungkin menjelaskan kegagalan.
Ruby sebelum 1.9 memiliki berbasis TCP
ping.rb
, yang akan berjalan dengan Ruby 1.9+. Yang harus Anda lakukan adalah menyalinnya dari instalasi 1.8.7 ke tempat lain. Saya baru saja mengkonfirmasi bahwa itu akan berjalan dengan melakukan ping router rumah saya.sumber
Ada banyak jawaban gila di sini dan terutama tentang CORS -
Anda dapat melakukan permintaan HEAD http (seperti MENDAPAT tapi tanpa muatan). Lihat https://ochronus.com/http-head-request-good-uses/
TIDAK memerlukan pemeriksaan preflight, kebingungannya adalah karena versi spesifikasi yang lama, lihat Mengapa permintaan HEAD lintas-asal memerlukan pemeriksaan preflight?
Jadi Anda bisa menggunakan jawaban di atas yang menggunakan perpustakaan jQuery (tidak mengatakannya) tetapi dengan
--->
Tentunya Anda juga dapat menggunakan vanilla js atau dojo atau apa pun ...
sumber
Saya tidak tahu versi Ruby apa yang Anda jalankan, tetapi sudahkah Anda mencoba menerapkan ping untuk ruby alih-alih javascript? http://raa.ruby-lang.org/project/net-ping/
sumber
ping server.com
sintaks.jika Anda menjalankan ini dengan node itu akan menghibur log 200 selama google tidak down.
sumber
gunakan seperti ini:
sumber
Anda dapat menjalankan perintah DOS ping.exe dari javaScript menggunakan folowing:
Apakah ini yang diminta, atau saya kehilangan sesuatu?
sumber
ganti saja
dengan
sumber
Mungkin jauh lebih mudah dari semua itu. Jika Anda ingin memuat halaman Anda kemudian memeriksa ketersediaan atau konten beberapa halaman asing untuk memicu aktivitas halaman web lain, Anda bisa melakukannya hanya menggunakan javascript dan php seperti ini.
yourpage.php
Itu harus dilakukan.
Javascript yang dipicu harus menyertakan clearInterval (stopmelater)
Beri tahu saya jika itu berhasil untuk Anda
Jerry
sumber
Anda dapat mencoba menggunakan PHP di halaman web Anda ... sesuatu seperti ini:
Ini tidak diuji sehingga mungkin memiliki kesalahan ketik dll ... tapi saya yakin itu akan berhasil. Dapat ditingkatkan juga ...
sumber