在Raspberry Pi上安裝NodeJS,有沒有辦法檢查rPi是否通過NodeJs連接到互聯網?檢查NodeJs中的互聯網連接
回答
一個快速和骯髒的方法是檢查是否節點可以解決www.google.com
:
require('dns').resolve('www.google.com', function(err) {
if (err) {
console.log("No connection");
} else {
console.log("Connected");
}
});
這不是整個萬無一失,因爲你的RaspPi可以連接到互聯網還未能解決www.google.com
出於某種原因,並且您可能還想檢查err.type
以區分'無法解析'和'無法連接到名稱服務器,因此連接可能會關閉')。
我不得不在前段時間在NodeJS-app中構建類似的東西。我這樣做的方式是首先使用networkInterfaces()函數是OS模塊,然後檢查一個或多個接口是否具有非內部IP。
如果這是真的,那麼我使用exec()開始ping定義良好的服務器(我喜歡Google的DNS服務器)。通過檢查exec()的返回值,我知道ping是否成功。我根據接口類型調整了ping的數量。分叉進程引入了一些開銷,但由於此測試在我的應用程序中執行得並不頻繁,我可以負擔得起。另外,通過使用ping和IP地址,您不需要依賴DNS正在配置。這裏是一個例子:
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")
});
儘管robertklep的解決方案的工作原理,它遠遠不是最好的選擇。如果您沒有互聯網連接,dns.resolve
需要大約3分鐘時間,如果您沒有互聯網連接,則會發出錯誤,而dns.lookup
幾乎立即響應,並顯示錯誤ENOTFOUND
。
所以我做了這個功能:
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
}
});
這是目前爲止檢查互聯網連接的最快方式,它避免了不相關的互聯網連接的所有錯誤。
解決方案取決於谷歌。有沒有其他的東西,像標準的方式? – Deep 2017-02-23 06:55:01
Deep Kakkar你需要研究互聯網如何工作。有人已經告訴過你了,但是這裏又一次(逐字):沒有這樣的「標準」方式,因爲爲了測試**互聯網**的連通性,你必須在互聯網**上測試一些實際的東西。 如果您不喜歡針對Google進行測試,請針對Facebook,雅虎,華爾街日報或任何其他網站進行測試。但是你必須在**實際的互聯網**上使用一個網站。沒有其他辦法。 – 2017-08-03 15:35:06
這不是儘可能做到萬無一失,但完成這項工作:
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
});
只使用一個簡單if(err)
和充分治療的反應。 :)
ps .:請不要打擾告訴我8.8.8.8不是一個需要解決的名稱,它只是從谷歌查找高度可用的dns服務器。目的是檢查連通性,而不是名稱解析。
解決方案取決於谷歌。有沒有其他的東西,像標準的方式? – Deep 2017-02-23 06:54:58
真的沒有這樣的「標準」方式,因爲要測試**互聯網**連接性,您必須在**互聯網**上實際測試某些內容。我想你可以檢查你想要的任何東西,亞馬遜,isp,cdn,IDK,爲了簡單起見,只是使用谷歌,BTW使用IP使它獨立於DNS。 – 2017-03-05 10:30:39
- 1. 檢查互聯網連接
- 2. 互聯網連接檢查
- 3. 檢查互聯網連接
- 4. 檢查互聯網連接
- 5. 檢查互聯網連接
- 6. 檢查互聯網連接
- 7. 檢查互聯網連接或不斷檢查互聯網連接
- 8. 在Android中檢查互聯網連接
- 9. 在android中檢查互聯網連接
- 10. 在java中檢查互聯網連接
- 11. 在Silverlight中檢查互聯網連接
- 12. 在java中檢查互聯網連接
- 13. Android連續檢查互聯網連接
- 14. 檢查tizen的互聯網連接
- 15. 檢查有效的互聯網連接
- 16. 檢測互聯網連接
- 17. 檢測互聯網連接
- 18. Android互聯網連接檢查
- 19. Strophe.js:檢查互聯網連接
- 20. 檢查互聯網連接OKHTTP
- 21. Android互聯網連接檢查問題
- 22. 互聯網連接並檢查它
- 23. Android定期檢查互聯網連接
- 24. 在Android上檢查互聯網連接
- 25. 不斷檢查互聯網連接
- 26. Xamarin檢查互聯網連接
- 27. 使用offline.js檢查互聯網連接
- 28. 螞蟻檢查互聯網連接
- 29. WinRT如何檢查互聯網連接?
- 30. 檢查互聯網連接iOS 5
解決方案取決於谷歌。有沒有其他的東西,像標準的方式? – Deep 2017-02-23 06:54:47
@Deep如果你有自己的網站,試着解決它,而不是谷歌。否則,像谷歌這樣的高可用性服務器是您的最佳選擇https://github.com/sindresorhus/is-online是一個選項 – Ero 2017-02-24 20:38:30
看來,這緩存了結果,所以如果您的應用程序在運行此代碼後失去連接,它會給出錯誤的印象,即存在連接。 – BrunoLM 2017-05-11 16:15:40