Sejak Libuv V1.35.0 (Node
v13.12.0&v12.17.0) BaikTCP_KEEPINTVLdanTCP_KEEPCNTmemiliki nilai yang agak dapat diprediksi Paket ini memungkinkan Anda untuk mengubah nilai -nilai tersebut per setiap soket tetapi dengan biaya harus berurusan dengan overhead FFI dan dependensi. Periksa dokumen simpul terbaru untuk socket.setkeepaLiveNable, jika nilai default cukup baik untuk Anda maka Anda tidak perlu menggunakan paket ini.
The Missing ( TCP_KEEPINTVL dan TCP_KEEPCNT ) SO_KEEPALIVE OPSI SOCKET SETTER DAN GITTERS UNTUK NODE Menggunakan FFI.
Diuji pada linux & osx (baik amd64 dan arm64 ), harus bekerja pada freebsd dan lainnya. Menginstal pada win32 tetapi metode tidak ada ops (permintaan tarik selamat datang).
Ada juga dukungan untuk mendapatkan & mengatur opsi TCP_USER_TIMEOUT ( linux dan osx ), yang terkait erat dengan Keep-Alive.
| Platform | Tcp_keepintvl | Tcp_keepcnt | Tcp_user_timeout |
|---|---|---|---|
linux | |||
osx | ( TCP_RXT_CONNDROPTIME ) | ||
freebsd | |||
win32 |
Legenda:
npm install --save net-keepaliveAnda dapat menemukan Dokumen Referensi API lengkap (JSDOC) yang diterbitkan di halaman GitHub kami.
Proyek ini mencakup file definisi naskah ( index.d.ts ) yang memberikan gambaran umum dari API yang terpapar.
Dokumentasi dihasilkan dari komentar JSDOC, jangan ragu untuk memperbaikinya dengan mengirimkan permintaan tarik.
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
} ) Sekarang menggunakan iptables tambahkan aturan untuk menjatuhkan semua paket tcp pada rantai INPUT ke port 1337 .
iptables -I INPUT -m tcp -p tcp --dport 1337 -j DROP Jika Anda memantau paket di loopback dengan tcp.srcport == 1337 || tcp.dstport == 1337 filter di wireshark . Anda akan melihat output berikut:
Selamat bersenang-senang!
Info lebih lanjut tentang SO_KEEPALIVE di sini: TCP Keepalive Howto C Code Contoh Di Sini: Contoh
CATATAN: Agar metode ini berfungsi, Anda harus mengaktifkan SO_KEEPALIVE dan mengatur opsi TCP_KEEPIDLE untuk soket menggunakan Net.Socket -s built in Method 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
// .... Lihat code_of_conduct.md
Lihat Contributing.md
Terima kasih kepada orang -orang yang luar biasa ini (Kunci Emoji):
George Hertz | Alba Mendez | Paulo Castro | Jacob Jewell | Rmutharaju | Rafael Borges | Calvin |
GGSubs | Mario Kozjak | Lukas Knuth | Ivan | Otávio Jacobi |
Proyek ini mengikuti spesifikasi semua-kontributor. Kontribusi apa pun yang baik!