在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. 在Silverlight中检查互联网连接
- 10. Android连续检查互联网连接
- 11. 检查tizen的互联网连接
- 12. 检查有效的互联网连接
- 13. 检查互联网连接iOS 5
- 14. 检查INTENT互联网连接
- 15. JavaScript来检查互联网连接
- 16. Android:检查互联网连接
- 17. 互联网连接并检查它
- 18. 在Android上检查互联网连接
- 19. 即时检查互联网连接
- 20. 蚂蚁检查互联网连接
- 21. Android自动检查互联网连接
- 22. 超时检查互联网连接Android
- 23. Android检查互联网连接
- 24. Android互联网连接检查问题
- 25. WinRT如何检查互联网连接?
- 26. 从Excel VBA检查互联网连接
- 27. Xamarin检查互联网连接
- 28. 检查是否有互联网连接
- 29. 检查互联网连接(iOS 10)
- 30. 在Android上检查互联网连接
解决方案取决于谷歌。有没有其他的东西,像标准的方式? – 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