![]() |
MIDAS TSocketConnection, Reconnect
Moin,
Einer meiner Kunden updatet seinen Windows-Server automatisch. Auf diesem Server laufen 3 Mittelschichten und der Borland Socket Server. Nun zum Problem: Die Clients haben alle eine TSocketconnection und verbinden sich mit dem Sockenserver und dann läuft alles. Wenn der Server aber nun neu startet, hängen einige Clients, vermutlich, weil im Client kein explizites Reconnect eingebaut ist. 1. Kennt jemand eine Lösung für das Reconnect-Problem in einer TSocketConnection? 2. Gibt es fertige Alternativen, die hier robuster sind? 3. Behandelt z.B. eine TWebConnection oder TDCOMConnection das Problem besser? Die Anwendung ist noch in Delphi 6 geschrieben. Ein Umstieg auf XE7 wäre also mit erheblichen Kosten verbunden, kommt also nicht in Frage. Für Tipps wäre ich sehr dankbar. Grüße |
AW: MIDAS TSocketConnection, Reconnect
Ich hab das Problem auch in einer Delphi 6 Anwendung. Bei Abbruch der Verbindung wird der Error ausgelöst, was ich nutze um dem Nutzer im Client anzuzeigen, dass gerade keine Verbindung besteht. Hier müsste man eigentlich noch den Error genauer prüfen, aber mir ist es an der Stelle eigentlich egal, warum, hauptsache ich weiß, dass die Verbindung nicht mehr steht.
An dieser Stelle könnte dann auch ein Timer gestartet werden (ist bei mir nicht nötig, da eh einer läuft) der alle X Sekunden einen Reconnect versucht. In meinem Fall guckt er dazu in einer DB nach den Parametern für Host und Port, da es u.U. sein kann, dass ein anderer Server einspringt und der Client sich einfach mit diesem verbindet.
Delphi-Quellcode:
procedure TMain.ClientSocketError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin if not ClientSocket.Active then LC.CreateWarnline; ErrorCode:=0; end; procedure TMain.TimerTimer(Sender: TObject); begin //... //Da in meinem Fall der Server alle 30 sek. was schicken soll //prüfe ich u.a. im Timer, wie alt die letzte Nachricht ist. //So fällt ein Verbindungsabbruch auch ohne Error auf. if SecondsBetween(now,LastServerMessage) > 60 then if not ClientSocket.Active then begin ConnectToServer; end; if SecondsBetween(now,LastServerMessage) > 120 then begin ConnectToServer; end; end; |
AW: MIDAS TSocketConnection, Reconnect
Zitat:
|
AW: MIDAS TSocketConnection, Reconnect
Ich habe leider in der TSocketConnection keinen ErrorEvent, ich befürchte, ich muss in den Borland Quellcode rein. Wo hab ich nur den Staubsauger?
Ich hatte gehofft, das irgendwer vielleicht eine Lösung parat hat. Das Connection-Problem besteht ja ej bei allen TCP-Verbindungen, da es auch sein kann, das in einem Switch die Putzfrau an das Kabel gekommen ist und ein Disconnect noch nicht mal bemerkt wird. Vielleicht muss ich mit einer zweiten Verbindung einfach Heartbeats hin und her schicken. Mal sehen. Also wenn wem mal so eine Reconnectable TSocketConnection über den Weg läuft, immer her damit. |
AW: MIDAS TSocketConnection, Reconnect
Zitat:
|
AW: MIDAS TSocketConnection, Reconnect
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz