2013-03-07 17 views

cevap

26

hızlı ve kirli yolu kontrol etmektir www.google.com:

require('dns').resolve('www.google.com', function(err) { 
    if (err) { 
    console.log("No connection"); 
    } else { 
    console.log("Connected"); 
    } 
}); 

sizin RaspPi nedense www.google.com çözmek için henüz yapamaz internete bağlanabilir bu durum, tamamını değil hatasız değildir Ayrıca, 'çözümlenemiyor' ve 'bir ad sunucusuna bağlanamayan bağlantıyı kesmek' arasında ayrım yapmak için err.type'u da kontrol etmek isteyebilirsiniz.

+1

Çözüm, google'a bağlıdır. Standart bir yol gibi bir alternatif var mı? – Deep

+1

@Dev siteniz varsa, google yerine onu çözmeye çalışın. Aksi takdirde, google gibi yüksek oranda kullanılabilir sunucular en iyi seçeneğinizdir. https://github.com/sindresorhus/is-online bir seçenek – Ero

+0

Bu önbellek sonucu önbelleğe alır, bu nedenle bu kodu çalıştırdıktan sonra uygulamanız bağlantıyı kaybederse, bağlantı olduğunu yanlış bir şekilde gösterecektir. Bağlantı için – BrunoLM

7

Bir süre önce bir NodeJS uygulamasında benzer bir şey inşa etmek zorunda kaldım. Yaptığım yol, ilk olarak networkInterfaces() işlevinin OS-modülüdür ve bir veya daha fazla arabirimin dahili bir IP'ye sahip olup olmadığını kontrol etmekti.

Eğer bu doğruyduysa, ping'i iyi tanımlanmış bir sunucuyla (Google'ın DNS sunucularını beğendim) başlatmak için exec()'u kullandım. Exec() dönüş değerini kontrol ederek, ping'in başarılı olup olmadığını biliyorum. Arabirim tipine göre ping sayısını değiştirdim. Bir işlemin başlatılması bazı ek yükleri beraberinde getirir, ancak bu test benim uygulamamda çok sık gerçekleştirilmediğinden, bunu karşılayabiliyorum. Ayrıca, ping ve IP adresleri kullanarak, yapılandırılmakta olan DNS'ye bağlı kalmazsınız. Örnek:

var exec = require('child_process').exec, child; 
child = exec('ping -c 1 128.39.36.96', function(error, stdout, stderr){ 
    if(error !== null) 
      console.log("Not available") 
     else 
      console.log("Available") 
}); 
33

robertklep'in çözümü çalışırken, bunun için en iyi seçenek olmaktan çok uzaktır dns.resolve için zaman aşımı süresi yaklaşık 3 dakika sürer ve bir internet bağlantınız yoksa bir hata verir, dns.lookup ise hemen ENOTFOUND hatasıyla hemen yanıt verir.

function checkInternet(cb) { 
    require('dns').lookup('google.com',function(err) { 
     if (err && err.code == "ENOTFOUND") { 
      cb(false); 
     } else { 
      cb(true); 
     } 
    }) 
} 

// example usage: 
checkInternet(function(isConnected) { 
    if (isConnected) { 
     // connected to the internet 
    } else { 
     // not connected to the internet 
    } 
}); 

Bu farkla internet bağlantısı için kontrol en hızlı yoludur ve internet bağlantısı ile ilgili olmayan tüm hataları önler:

yüzden bu fonksiyonu yaptı.

+1

Çözüm, google'a bağlıdır. Standart bir yol gibi bir alternatif var mı? – Deep

+3

Deep Kakkar internetin nasıl çalıştığını incelemeniz gerekiyor.Birisi size bunu daha önce anlattı, ama işte burada tekrar (verbatim): Gerçekten böyle bir "standart" yol yoktur, çünkü ** internet ** bağlantılarını test etmek için ** internet ** üzerinde bir şeyi test etmeniz gerekiyor. Google’a karşı test yapmayı sevmiyorsanız Facebook, Yahoo, Wall Street Journal veya başka bir siteye karşı test edin. Ama ** fiili internet ** üzerinde bir site kullanmalisiniz. Başka yolu yok. –

4

mümkün olduğunca kusursuz değil ama işi:

var dns = require('dns'); 
dns.lookupService('8.8.8.8', 53, function(err, hostname, service){ 
    console.log(hostname, service); 
    // google-public-dns-a.google.com domain 
}); 

sadece basit if(err) kullanmak ve yeterli tepkiyi davranın.

ps .: Lütfen bana 8.8.8.8'in çözülecek bir isim olmadığını söyleme konusunda endişelenmeyin, google'dan yüksek oranda kullanılabilir bir dns sunucusuna yönelik bir aramadır. Amaç bağlantıyı kontrol etmektir, ad çözümlemesi değil.

+0

Çözüm, google'a bağlı. Standart bir yol gibi bir alternatif var mı? – Deep

+3

Gerçekten böyle bir "standart" yolu yoktur çünkü ** internet ** için test etmek için ** internet ** üzerinde bir şeyi test etmeniz gerekiyor. İstediğiniz herhangi bir şey için kontrol edebilirsiniz, amazon, isp, cdn, IDK, sadece basitlik uğruna google kullanılan, BTW kullanarak IP DNS bağımsız yapar. –

İlgili konular