Frage

Wie lange kann ich erwarten, dass ein client/server-TCP-Verbindung mit die letzten in der wildnis?

Ich möchte, dass es dauerhaft bleiben verbunden, aber die Dinge passieren, so wird der client wieder zu verbinden.An welchem Punkt muss ich sagen, dass es ein problem im code statt, es gibt ein problem mit einigen externen Geräten?

War es hilfreich?

Lösung

Ich Stimme mit Zan Lynx.Es gibt keine Garantie, aber Sie können eine Verbindung aufrecht erhalten, nahezu unbegrenzt durch das senden von Daten über Sie, vorausgesetzt, es gibt keine Verbindungs-oder bandbreitenprobleme.

In der Regel habe ich Weg für die Anwendungs-Ebene keep-alive-Ansatz, obwohl dies in der Regel, weil es in der client-spec-so habe ich es je zu tun hatte.Aber senden Sie einfach einige kurze Stück von Daten jede minute oder zwei, zu denen Sie erwarten, dass irgendeine Art von Bestätigung.

Ob Sie damit rechnen, einen Fehler zu erkennen, wie die Verbindung fehlgeschlagen ist bis zu Ihnen.Im Allgemeinen ist dies das, was ich in der Vergangenheit getan haben, obwohl es war ein Fall musste ich warten, für drei fehlgeschlagenen Antworten in einer Reihe, um die drop-Verbindung, da die app am anderen Ende der Verbindung war extrem unzuverlässig zu reagieren "bist du da?" - Anfragen.

Wenn die Verbindung fehlschlägt, die an einem gewissen Punkt wird es wahrscheinlich auch mit Maschinen auf dem gleichen Netzwerk, dann versuchen Sie einfach, es wiederherzustellen.Wenn das fehlschlägt, eine festgelegte Anzahl von Zeiten, dann haben Sie ein problem.Wenn Ihre Verbindung beharrlich fehlschlägt, nachdem es angeschlossen wurde, für eine Weile, dann wieder, haben Sie ein problem.Höchstwahrscheinlich in beiden Fällen ist es wahrscheinlich einige Netzwerk-Problem, anstatt Ihren code, oder vielleicht ein problem mit der TCP/IP-stack auf dem Computer wurde bekannt:Ich traf Sie Probleme mit dieser auf einer alten version von QNX-es würde nur zufällig fallen).Nachdem das gesagt ist, haben Sie möglicherweise ein software-problem, und der einzige Weg, um sicher wissen, ist oft auf einen debugger Anhängen, oder um einige der Protokollierung in.E. g.wenn Sie können immer verbinden erfolgreich, doch nach einer Zeit, die Sie aufhören, ACKs, auch nach reconnect, dann vielleicht Ihr server Deadlocks oder immer stecken in einer Schleife oder so etwas.

Was wirklich nützlich ist, eine Reihe von long-running tests unter verschiedenen Last Bedingungen, aus nur senden die keep alive-Sie sind es?/ack-Anfragen und Antworten, um absolut battering der server.Dies wird in der Regel geben Sie mehr Vertrauen in Ihre software-Komponenten, und kann wirklich nützlich, ausschütteln einige wirklich seltsame Probleme, die nicht unbedingt dazu führen, ein problem mit deiner Verbindung, obwohl Sie möglicherweise zu Problemen führen, mit der Transaktionen stattfinden.Zum Beispiel war ich einmal das schreiben einer Telekom-Anwendungs-server bereitgestellten Dienste, wie beispielsweise die Anzahl der übersetzung, und wir würden nur laufen lassen für Tage zu einer Zeit.Die Sache ist, dass, wenn Samstag kam Runde für den ganzen Tag, es ablehnen würde jedem Aufruf Anfrage, die kamen, die sich für Millionen von anrufen, und wir hatten keine Ahnung, warum.Es stellte sich heraus, dass aufgrund einer einzigen Tippfehler in manchen Datum Konvertierung code, der nur ein problem verursacht samstags.

Hoffe, das hilft.

Andere Tipps

Ich denke, die meisten wichtig Idee hier ist, Theorie vs.Praxis.

Die ursprüngliche Theorie war, dass die verbindungen hatte kein Leben.Wenn Sie hatte eine Verbindung, es blieb für immer geöffnet, auch wenn es war kein Verkehr, bis ein Ereignis verursacht, die es zu schließen.

Die neue Theorie ist, dass die meisten OS-Versionen haben sich auf dem keep-alive-timer.Dies bedeutet, dass verbindungen, die für immer andauern werden, solange das system am anderen Ende antwortet auf eine gelegentliche TCP-Ebene exchange.

In der Realität werden viele verbindungen werden beendet, nachdem es Zeit, mit einer Vielzahl von Kriterien und Situationen.

Zwei wirklich gute Beispiele sind:Remote-client mit DHCP-die lease-Dauer abgelaufen, und die IP-Adresse ändert.

Ein weiteres Beispiel ist die firewalls, die scheinen zu sein, immer intelligenter, und identifizieren können keep-alive-traffic vs.echten Daten, und schließen von verbindungen basierend auf einer high-level-Kriterien, vor allem im Leerlauf.

Wie Sie implementieren möchten Logik wiederherzustellen, hängt stark von Ihrer Architektur, die Umgebung, und Ihre performance-Ziele.

Es sollte nicht wirklich wichtig ist, sollten Sie das design Ihres Codes automatisch erneut hergestellt, wenn, die das gewünschte Verhalten.

Es gibt wirklich keine Möglichkeit zu erzählen.Es ist nichts inhärent TCP-dazu führen würde, dass die Verbindung zu einfach, nach einer gewissen Zeit.Jemanden auf eine zuverlässige Verbindung haben könnte Jahre Betriebszeit, während jemand, der auf einem anderen Anschluss haben, verbinden alle 5 Minuten.Es gibt keine Möglichkeit zu sagen, oder gar erraten.

Benötigen Sie einige Daten, die über die Verbindung in regelmäßigen Abständen zu halten es am Leben - viele OS oder firewalls fallen wird, eine inaktive Verbindung.

Wählen Sie einen Wert ein.Ein Tropfen jede Stunde ist wahrscheinlich in Ordnung.Zehn unerwartete Verbindung Tropfen in 5 Minuten wohl ein problem gibt.

TCP-verbindungen werden in der Regel dauern rund zwei Stunden ohne Verkehr.Entweder Ende kann senden von keep-alive " - Pakete, die sind, glaube ich, nur ein ACK auf das Letzte empfangene Paket.Diese kann in der Regel festgelegt werden, die pro sockel oder standardmäßig auf jedem TCP-Verbindung.

Eine application-level-keep-alive-ist ebenfalls möglich.Für eine telnet-Stil Protokoll wie FTP -, SMTP -, POP-oder IMAP-so etwas wie das senden zurück, newline und immer wieder eine Eingabeaufforderung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top