Установленный NodeJS на Raspberry Pi, есть ли способ проверить, подключен ли 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. То, как я это делал, это сначала использовать функцию networkInterfaces() - это OS-модуль, а затем проверить, нет ли у одного или нескольких интерфейсов не-внутреннего IP-адреса.
Если это правда, то я использовал exec(), чтобы запустить ping с хорошо определенным сервером (мне нравятся DNS-серверы Google). Проверяя возвращаемое значение exec(), я знаю, что 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 работает, это далеко не лучший выбор для этого. Требуется около 3 минут для dns.resolve
до таймаута и дать сообщение об ошибке, если у вас нет подключения к Интернету, а 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
}
});
Это, безусловно, самым быстрым способом проверки подключения к Интернету, и это позволяет избежать всех ошибок, которые не связаны с подключением к Интернету.
Решение зависит от Google. Есть ли альтернатива и что-то вроде стандартного способа? – Deep
Deep Kakkar вам нужно изучить, как работает интернет.Кто-то уже сказал вам это, но здесь он повторился (дословно): такого «стандартного» способа нет, потому что для тестирования ** подключения к Интернету вам нужно что-то проверить на ** интернет **. Если вам не нравится тестирование против Google, проверьте на Facebook, Yahoo, Wall Street Journal или на любом другом сайте. Но вы должны использовать сайт на ** фактическом интернет **. Другого пути нет. –
Это не так несложный, насколько это возможно, но получить работу:
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-сервера из Google. Целью является проверка возможности подключения, а не разрешение имен.
Решение зависит от Google. Есть ли альтернатива и что-то вроде стандартного способа? – Deep
Нет такого «стандартного» способа, потому что для того, чтобы проверить наличие ** интернет-соединения, вы должны проверить что-то на самом деле ** в Интернете **. Я полагаю, вы можете проверить все, что хотите, amazon, isp, cdn, IDK, просто использовали Google для простоты, BTW с использованием IP делает его независимым от DNS. –
- 1. Проверьте подключение к Интернету или проверьте подключение к Интернету постоянно
- 2. Проверьте подключение к Интернету?
- 3. Проверьте подключение к Интернету
- 4. Проверьте подключение к Интернету
- 5. Проверьте подключение к Интернету C#
- 6. Проверьте фактическое подключение к Интернету
- 7. Android, проверьте подключение к интернету
- 8. Проверьте реальное подключение к Интернету
- 9. Проверьте подключение к Интернету OKHTTP
- 10. Проверьте подключение к Интернету INTENT
- 11. Мгновенно проверьте подключение к Интернету
- 12. Android: проверьте подключение к Интернету в webview
- 13. Проверьте подключение к Интернету в Swift
- 14. Проверьте подключение к Интернету в андроида
- 15. Проверьте подключение к Интернету в iOS 9?
- 16. Проверьте подключение к Интернету в Silverlight
- 17. Проверьте подключение к Интернету Андроида в фоновом
- 18. проверьте, есть ли подключение к Интернету
- 19. Проверьте подключение к Интернету с jquery
- 20. Проверьте подключение к Интернету во время работы
- 21. Проверьте подключение к Интернету на C++?
- 22. Проверьте подключение к Интернету с помощью offline.js
- 23. Проверьте подключение к Интернету или поймайте исключение?
- 24. Adobe Air - Проверьте подключение к Интернету
- 25. Проверьте подключение к Интернету из Excel VBA
- 26. Проверьте, доступно ли подключение к Интернету
- 27. Проверьте подключение к Интернету от Unity
- 28. Проверьте подключение к Интернету с Swift
- 29. Windows Phone 8.1: Проверьте подключение к Интернету
- 30. javascript/dashcode: проверьте подключение к Интернету
Решение зависит от Google. Есть ли альтернатива и что-то вроде стандартного способа? – Deep
@ Deep, если у вас есть собственный сайт, попробуйте разрешить его вместо Google. В противном случае доступными серверами, такими как google, являются ваш лучший вариант. https://github.com/sindresorhus/is-online является опцией – Ero
Кажется, что это кэширует результат, поэтому, если ваше приложение потеряет соединение после запуска этого кода, это создаст ложное впечатление о наличии соединения. – BrunoLM