2012-03-30 6 views
1

Mein TCP-Server ist mit Netty implementiert. Mein Client, der vanilla java.net.Socket verwendet, um eine Verbindung zu diesem Server herzustellen. Ich verwende den gleichen Socket, um mehrere Anfragen an den Server zu senden. Sobald alle Anfragen erledigt sind, ruft der Client socket.close() an.Netty - Schließt das Schließen des Sockets auf Client-Seite den Kanal auf dem Server

Ich schließe den Kanal nicht irgendwo in meinem Server-Code. Außerdem habe ich TCP KEEP_ALIVE auf meinem Server eingestellt. Schließt das Schließen des Sockets auf dem Client automatisch den Kanal auf dem Server oder muss ich etwas anderes explizit tun und was ist die beste Vorgehensweise?

+0

Sie könnten diese Antwort lesen möchten: http://stackoverflow.com/questions/2165670/socket-close-in-java. – jgauffin

Antwort

2

Normalerweise, wenn eine Anwendung einen Socket schließt, bemerkt die Gegenstelle auch, dass die Schließung. Daher müssen Sie close() nicht auf beiden Seiten aufrufen. Manchmal werden Sie jedoch aufgrund von Netzwerkproblemen nicht benachrichtigt, wenn der Remote-Peer die Verbindung schließt. Um dieses Problem umzugehen, ist es eine gute Idee, einige Nachricht regelmäßig zu senden, und Sie werden dann die unerwartete Beendigung früher erkennen.

Bitte beachten Sie, dass SO_KEEP_ALIVE hier für die meisten Betriebssysteme nicht viel hilft, da die Standardhaltezeit sehr lang ist.

Verwandte Themen