Keep Alive TCP / IP-Sockets über das Internet verbunden - wann? Wie? und wie viel

AKTUALISIEREN Fahren Sie mit der Antwort fort, wenn Sie sich die lange Präambel sparen möchten.

TCP / IP-Verbindungen KeepAlives müssen mindestens alle zwei Stunden ausgeführt werden:http: //tools.ietf.org/html/rfc1122#page-10. Das Problem ist, dass dies 1989 geschrieben wurde und sich Sorgen über die Kosten für das Senden des zusätzlichen KeepAlive-Pakets macht! Es ist jedoch immer noch die Standardzeit, die die meisten Betriebssysteme gemäß der Spezifikation verwenden, um KeepAlives nach einer gewissen Zeit der Inaktivität über einen verbundenen Socket zu senden! Natürlich sterben heutzutage die meisten Verbindungen viel früher, wenn sie inaktiv sind, und wenn sie mit einem Peer über das Internet verbunden sind, ohne dass Sie es vorher wussten (obwohl die Zeitüberschreitung höher ist - ich vermute, dass Routertabellen dazwischen keine Probleme machen es lebt - ich habe mich immer gefragt, wo die letzte durchgesickerte Nachricht hingeht ...AKTUALISIEREN Der Grund dafür ist, dass "Router", die sich möglicherweise an Ihrem oder am Ende des Remote-Hosts befinden, "statusbehaftet" und verbindungsbewusst sind und die Verbindung nach einer gewissen Zeit der Inaktivität trennen. Die Router, die Sie über das Internet verwenden, können Ihre Verbindung nicht trennen Verbindung - sie kümmern sich nicht darum - das Paket wird einfach dorthin gesendet, wo es hingehen muss). Daher habe ich zwei gängige Lösungen für die Aufrechterhaltung der Verbindung über das Internet gesehen:

1) Ignorieren BEARBEITEN Wie mir bereits gesagt wurde, wird die Spezifikation nicht ignoriert. Es wird lediglich die Standardspezifikation geändert. Ändern Sie das systemweite KeepAlive-Intervall auf weniger als 2 Stunden. Oder 2) Implementieren Sie Ihr eigenes KeepAlive-System, indem Sie den Peer regelmäßig abfragen .

In jedem Fall; Was ist ein geeigneter Zeitraum (Inaktivität, um Ihr KeepAlive zu senden)? Ich habe alles von 1 Sekunde bis zu den Standardzeiten von 2 Stunden gesehen. Es scheint, als wäre die Zahl aus dem Häppchen gelutscht ... Wenn ich eine Client-Anwendung habe, die möglicherweise von irgendwo auf der Welt aus eine Verbindung herstellt, welcher Zeitraum ist sicher und angemessen (ich möchte eine einzige dauerhafte Verbindung)? Wenn Sie sich über das Internet mit einem Peer verbinden, der viele Kilometer von der anderen Seite der Welt entfernt ist, bricht die Verbindung nach 301 Sekunden ab (obwohl Sie das nur wissen, wenn Sie versuchen, etwas zu senden). Ich erhalte das KeepAlive 1 Sekunde vor dem Tod - dieses Intervall hat mich nie enttäuscht. Aber ist es sicher?

BEARBEITEN Diese spezielle Verbindung wird in C # 3.0 implementier

Antworten auf die Frage(4)

Ihre Antwort auf die Frage