Frage Datasnap: Gibt es eine Möglichkeit, Verbindungsverlust global zu erkennen?


Ich suche nach lokalen Verbindungsverlusten. Gibt es ein Mittel dazu, wie bei den Ereignissen in den Corelabs-Komponenten?

Vielen Dank

BEARBEITEN: Tut mir leid, ich werde versuchen, genauer zu sein: Ich entwerfe gerade einen Prototyp mit datasnap 2009. Ich habe also einen Thin Client, eine Stateless Server App und einen Datenbankserver.

Was ich tun könnte, ist Verbindungsverlust (Internet-Konnektivität) zwischen dem Client und der Server-App zu erkennen und zu behandeln, um es entsprechend zu behandeln, dh: Zeige eine informative Fehlermeldung an den Benutzer oder um einen Server-Shutdown zu erkennen, um still umgeleitet zu werden ein anderer App-Server.

In der 2-Schicht, die ich bisher mit ODAC-Komponenten verwaltet habe, verfügt die TOraSession über einige Ereignisse, um diese Probleme zu lösen.


7
2018-02-13 17:43


Ursprung


Antworten:


Normalerweise wird kein Ereignis ausgelöst, wenn eine Verbindung unterbrochen wird, es sei denn, eine Anweisung wird für die Datenbank ausgelöst. Dies liegt daran, dass es keine Möglichkeit gibt, einen Verbindungsverlust zu erkennen, es sei denn, es gibt eine Art Is-Alive-Ping.

Viele Frameworks überprüfen, ob eine Verbindung noch gültig ist, indem sie eine sehr kleine Abfrage für den Server ausführen. Könnte die Zeit von einem Server bekommen. Besonders in einer Connection-Pooling-Umgebung.

Sie können eine Verbindungsprüfungsfunktion in Ihrer Anwendung in einigen Datenbankereignissen implementieren (vor dem Ausführen?). Oder machen Sie einen Timer, der alle 10 Sekunden überprüft.


4
2018-02-17 09:35



Erstellen Sie einen Thread auf dem Client, der regelmäßig einige RPC- "Ping" - oder "Heartbeat" -Befehle an den Server sendet.

  • Wenn dies fehlschlägt, weiß der Client, dass der Verbindung etwas passiert ist

  • Wenn der Server den Client für einige Zeit nicht mehr hört (z. B. zweimal das Heartbeat-Intervall), kann er feststellen, dass der Client getrennt wurde. Dies erfordert jedoch einen statusbehafteten Server (und Ihr Entwurf ist zustandslos, sodass eine Ereignisverarbeitung erforderlich ist) in einem sekundären System, das über eine Nachrichtenwarteschlange gespeist werden könnte)


1
2017-07-15 12:01