Heim  >  Artikel  >  Java  >  Wie verhindert TCP-Keep-Alive veraltete Socket-Verbindungen?

Wie verhindert TCP-Keep-Alive veraltete Socket-Verbindungen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-26 08:42:30863Durchsuche

How Does TCP Keep-Alive Prevent Stale Socket Connections?

Verfügt eine TCP-Socket-Verbindung über ein „Keep Alive“?

Ja, es gibt einen Timeout-Mechanismus für TCP-Socket-Verbindungen namens TCP Keep-Alive. Es verhindert, dass Socket-Verbindungen auf unbestimmte Zeit offen bleiben, und behebt Szenarien, in denen eine Seite die Verbindung beendet, ohne die andere zu benachrichtigen.

TCP Keep-Alive-Prozess

TCP Keep-Alive kann unter Linux wie folgt konfiguriert werden Eigenschaften:

  • tcp_keepalive_time (Standard: 7200 Sekunden)
  • tcp_keepalive_probes (Standard: 9)
  • tcp_keepalive_intvl (Standard: 75 Sekunden)

Der Prozess beinhaltet das Senden leerer ACK-Pakete in regelmäßigen Abständen, bis eine Antwort empfangen wird. Wenn nach einer bestimmten Anzahl von Tests keine Antwort eingeht, wird die Verbindung beendet.

Implementierungshinweise

Keep-Alive-Pakete sind optional und werden möglicherweise nicht zuverlässig übertragen. In der Praxis unterstützen jedoch die meisten Betriebssysteme und Cloud-Anbieter diesen Mechanismus.

TCP-Timeouts ändern

Pro Socket-Konfiguration (Java 11 und höher):

Java 11 führte die Möglichkeit ein, TCP-Timeouts auf Socket-Ebene mithilfe von nativem Code zu konfigurieren.

Systemweite Konfiguration:

Für ältere Versionen von Java und Auf anderen Betriebssystemen müssen Sie möglicherweise eine Timeout-Konfiguration auf Systemebene anwenden.

Linux:

# Echo commands to modify the values in /proc
echo 180 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 3 > /proc/sys/net/ipv4/tcp_keepalive_probes
echo 10 > /proc/sys/net/ipv4/tcp_keepalive_intvl

Mac OS X:

# Use sysctl to modify values
sysctl -w net.inet.tcp.keepidle=180000 net.inet.tcp.keepintvl=10000 net.inet.tcp.keepcnt=3

Windows:

Registrierungsschlüssel: HKEY_LOCAL_MACHINESystemCurrentControlSetServicesTCPIPParameters

Das obige ist der detaillierte Inhalt vonWie verhindert TCP-Keep-Alive veraltete Socket-Verbindungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn