Utilité TCP Ping avec une API synchrone
⌛⇄
npm i tcp-ping-sync La bibliothèque expose deux méthodes, ping et probe :
const { ping , probe } = require ( 'tcp-ping-sync' ) ;
const response = ping ( { host : 'google.com' , port : 443 } ) ;
console . log ( response ) ;
// {
// results: [
// { seq: 0, time: 126.462211 },
// { seq: 1, time: 113.164184 },
// { seq: 2, time: 132.048925 },
// { seq: 3, time: 148.315887 },
// { seq: 4, time: 137.088763 },
// { seq: 5, time: 105.050291 },
// { seq: 6, time: 105.028794 },
// { seq: 7, time: 109.297229 },
// { seq: 8, time: 102.262321 },
// { seq: 9, time: 112.281641 }
// ],
// stats: {
// min: 102.26232,
// avg: 119.10002450000002,
// max: 148.315887,
// stddev: 15.019185518208955
// },
// settings: {
// host: 'google.com',
// port: 443,
// attempts: 10
// }
// }
const isGoogleReachable = probe ( 'google.com' ) ;
console . log ( isGoogleReachable ) ;
// true const { ping , probe } = require ( 'tcp-ping-sync' ) ;
// Probe (does a single ping attempt succeed?)
const isRemoteReachable = probe (
( host = String ) , // (default: 'localhost')
( port = Number ) // (default: 80)
) ;
const isLocalReachable = probe (
( port = Number ) // (default: 80)
) ;
// Ping
const {
results = [
{
seq : Number , // Sequence [0...attempts-1]
time : Number // Response time
}
// ...
] ,
stats = {
min : Number , // Fastest response time
max : Number , // Slowest response time
avg : Number , // Average response time
stddev : Number // Standard deviation
} ,
settings : Object // Resolved arguments (host, port & attempts)
} = ping ( {
host : String , // Hostname/IP address (default: 'localhost')
port : Number , // Port number (default: 80)
attempts : Number // Number of attempts (default: 10)
} ) ; Plus d'exemples d'utilisation peuvent être trouvés dans les tests ( test.js ), qui peuvent être exécutés avec npm test . Pour exécuter les tests avec la sortie de débogage, exécutez npm run test:debug .
Cette bibliothèque a une dépendance facultative (NetLinkWrapper) qui doit compiler les modules natifs. Si votre plate-forme ne le compile pas, une dépendance alternative (mais plus lente) sera utilisée. Dans ce cas, vous ne devriez envisager d'utiliser cette bibliothèque que si vous avez vraiment besoin d'une réponse synchrone. Si l'async est acceptable, vous voudrez probablement utiliser tcp-ping à la place.
Ce travail est inspiré par tcp-ping d'Adam Paszke (MIT; © 2014). Merci également à Jacob Fischer d'avoir déterminé comment simuler les prises de réseau synchrones dans le nœud et d'implémenter la solution sous forme de Sync-Socket.