Étant donné que Libuv V1.35.0 (Node
v13.12.0&v12.17.0)TCP_KEEPINTVLetTCP_KEEPCNTont des valeurs quelque peu prévisibles, ce package vous permet de modifier ces valeurs par chaque socket, mais à un coût pour avoir à traiter les frais généraux FFI et les dépendances. Vérifiez les derniers documents de nœud pour socket.SetKeepALIveEnable, si les valeurs par défaut sont suffisamment bonnes pour vous, vous n'avez pas besoin d'utiliser ce package.
Les manquants ( TCP_KEEPINTVL et TCP_KEEPCNT ) SO_KEEPALIVE OPTIONS SETTEPS ET GARNERS POUR NODE À l'aide de FFI.
Testé sur linux et osx ( amd64 et arm64 ), devrait fonctionner sur freebsd et autres. Installation sur win32 mais les méthodes sont sans option (les demandes de traction sont les bienvenues).
Il y a également une prise en charge de l'obtention et de la définition de l'option TCP_USER_TIMEOUT ( linux et osx uniquement), qui est étroitement liée au Keep-Alive.
| Plate-forme | Tcp_keepintvl | TCP_KEELPCNT | Tcp_user_timeout |
|---|---|---|---|
linux | |||
osx | ( TCP_RXT_CONNDROPTIME ) | ||
freebsd | |||
win32 |
Légende:
npm install --save net-keepaliveVous pouvez trouver le document de référence API complet (JSDOC) publié sur nos pages GitHub.
Le projet comprend le fichier de définitions de typescript ( index.d.ts ) qui donne un aperçu de l'API exposée.
La documentation est générée à partir des commentaires de JSDOC, n'hésitez pas à les améliorer en envoyant des demandes de traction.
const Net = require ( 'net' ) ,
NetKeepAlive = require ( 'net-keepalive' )
// or
import * as Net from 'net'
import * as NetKeepAlive from 'net-keepalive'
// Create a TCP Server
const srv = Net . createServer ( ( s ) => {
console . log ( 'Connected %j' , s . address ( ) )
// Doesn't matter what it does
s . pipe ( s )
} )
// Start on some port
srv . listen ( 1337 , ( ) => {
console . log ( 'Listening on %j' , srv . address ( ) )
} )
// Connect to that server
const s = Net . createConnection ( { port : 1337 } , ( ) => {
console . log ( 'Connected to %j' , s . address ( ) )
//IMPORTANT: KeepAlive must be enabled for this to work
s . setKeepAlive ( true , 1000 )
// Set TCP_KEEPINTVL for this specific socket
NetKeepAlive . setKeepAliveInterval ( s , 1000 )
// Get TCP_KEEPINTVL for this specific socket
NetKeepAlive . getKeepAliveInterval ( s ) // 1000
// Set TCP_KEEPCNT for this specific socket
NetKeepAlive . setKeepAliveProbes ( s , 1 )
// Get TCP_KEEPCNT for this specific socket
NetKeepAlive . getKeepAliveProbes ( s ) // 1
} ) Maintenant, l'utilisation iptables Ajouter une règle pour supprimer tous les paquets tcp sur la chaîne INPUT au port 1337 .
iptables -I INPUT -m tcp -p tcp --dport 1337 -j DROP Si vous surveilliez les paquets sur loopback avec tcp.srcport == 1337 || tcp.dstport == 1337 Filtre dans wireshark . Vous verrez la sortie suivante:
Amusez-vous!
Plus d'informations sur SO_KEEPALIVE ici: TCP Keepalive Howto Code Exemples de C ici: Exemples
Remarque: Pour que ces méthodes fonctionnent, vous devez activer SO_KEEPALIVE et définir les options TCP_KEEPIDLE pour Socket à l'aide de Net.Socket -S intégrée dans la méthode socket.setKeepAlive([enable][, initialDelay]) !
TCP_KEEPIDLE (since Linux 2.4) The time (in seconds) the connection needs to remain idle before TCP starts sending keepalive probes, if the socket option SO_KEEPALIVE has been set on this socket. This option should not be used in code intended to be portable.
const NetKeepAlive = require ( 'net-keepalive' )
// or
import * as NetKeepAlive from 'net-keepalive'
// .....
const enable = true // enable SO_KEEPALIVE
const initialDuration = 1000 // start probing after 1 second of inactivity
socket . setKeepAlive ( enable , initialDuration ) // sets SO_KEEPALIVE and TCP_KEEPIDLE
const probeInterval = 1000 // after initialDuration send probes every 1 second
NetKeepAlive . setKeepAliveInterval ( socket , probeInterval ) //sets TCP_KEEPINTVL
const maxProbesBeforeFail = 10 // after 10 failed probes connection will be dropped
NetKeepAlive . setKeepAliveProbes ( socket , maxProbesBeforeFail ) // sets TCP_KEEPCNT
// .... Voir code_of_conduct.md
Voir contribution.md
Merci à ces gens merveilleux (clé emoji):
George Hertz | Alba Mendez | Paulo Castro | Jacob Jewell | Rmutharaju | Rafael Borges | Calvin |
ggsubs | Mario Kozjak | Lukas Knuth | Ivan | Otávio Jacobi |
Ce projet suit les spécifications de tous les contributeurs. Contributions de toute nature bienvenue!