Heim >Backend-Entwicklung >Golang >Wie kann ich das Schließen einer TCP-Verbindung in Go zuverlässig erkennen?
Erkennen von TCP-Verbindungsschließungen im Netzpaket von Go
Bei der Implementierung eines TCP-Servers ist die Überwachung von Client-Verbindungen von entscheidender Bedeutung. Um festzustellen, ob ein Client die Verbindung geschlossen hat, ist es wichtig, sich nicht ausschließlich auf Lese-/Schreibvorgänge zu verlassen. Stattdessen wird ein umfassender Ansatz empfohlen.
Bevorzugte Methode:
Der Thread „Bester Weg, um zuverlässig zu erkennen, dass eine TCP-Verbindung geschlossen ist“ schlägt die Verwendung einer Kombination aus vor SetReadDeadline()- und Read()-Funktionen:
one := make([]byte, 1) c.SetReadDeadline(time.Now()) if _, err := c.Read(one); err == io.EOF { // Client has closed the connection c.Close() c = nil } else { c.SetReadDeadline(time.Now().Add(10 * time.Millisecond)) }
Durch Festlegen eines Timeouts für den Lesevorgang können Sie basierend auf dem bestimmen, ob die Verbindung geschlossen ist io.EOF-Fehler.
Timeout-Erkennung:
Falls während des Lesevorgangs ein Timeout auftritt, finden Sie in der Go-Dokumentation Anleitungen:
if neterr, ok := err.(net.Error); ok && neterr.Timeout() { // Handle timeout }
Updates in Go 1.7:
Es ist erwähnenswert, dass dies in Go-Versionen der Fall ist 1.7 und höher werden Null-Byte-Lesevorgänge sofort ohne Fehler zurückgegeben. Daher ist es von entscheidender Bedeutung, sicherzustellen, dass mindestens ein Byte gelesen wird.
Zusammenfassend lässt sich sagen, dass ein robuster Ansatz mit SetReadDeadline(), Read() und Handlingtimeouts es Ihnen ermöglicht, TCP-Verbindungsschließungen im Netzpaket von Go zuverlässig zu erkennen.
Das obige ist der detaillierte Inhalt vonWie kann ich das Schließen einer TCP-Verbindung in Go zuverlässig erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!