2008-08-25 6 views
-1

Angenommen, ich habe eine Anwendung, die eine permanente Verbindung zu einem Server möchte. Wie implementiere ich die Verbindungs-/Neuverbindungslogik, so dass ich keine Ressourcen verschwenden (Strom/Bandbreite) und eine schnelle Verbindungswiederholungszeit habe, wenn die Verbindung erscheint/verbessert wird? Wenn ich nur Konnektivitätsbenachrichtigungen verwende, kann ich Probleme feststellen, die nicht mit dem lokalen Netzwerk zusammenhängen.Reconnect-Logik mit Connectivity-Benachrichtigungen

Bonus, wenn Sie mir die C# Version zeigen könnten.

Antwort

1

Dies ist eine sehr "große" Frage. Ich kann sagen, dass wir einen O/R-Mapper verwenden und jede "Abfrage" für die Datenbank ein Objekt namens PersistenceBroker benötigt. Diese Klasse ist verantwortlich für alle DB Stuff im Zusammenhang mit dem Verbinden, Authentifizieren usw.

Wir haben eine PersistenceBrokerFactory.GetCurrentBroker() geschrieben, die den "funktionierenden" Broker zurückgibt. Wenn die Datenbank plötzlich (aus welchen Gründen auch immer) fehlschlägt, wird das CONN-Objekt nach 30 Sekunden (oder was immer Sie definieren) "Timeout()". Wenn dies geschieht, zeigen wir dem Benutzer, dass er offline ist und eine Schaltfläche zum erneuten Verbinden anzeigt.

Auf der anderen Seite, um eine visuelle Anzeige, dass der Benutzer Konnektivität hat, haben wir einen Thread im Hintergrund ausgeführt, der alle 15 Sekunden auf Internetverbindung überprüft. Wir pingen 1 zu google.com. ;) Wenn das fehlschlägt, gehen wir davon aus, dass das Internet irgendwie kaputt ist, und wir aktualisieren eine Statusleiste.

Ich könnte Ihnen den ganzen Code für den Netzwerkzustandsmonitor zeigen, wenn Sie wollten. Ich nahm ein paar Bits von Google und andere, die ich mir gemacht habe :)