AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke MIDAS TSocketConnection, Reconnect
Thema durchsuchen
Ansicht
Themen-Optionen

MIDAS TSocketConnection, Reconnect

Ein Thema von Dejan Vu · begonnen am 11. Sep 2014 · letzter Beitrag vom 11. Sep 2014
Antwort Antwort
Dejan Vu
(Gast)

n/a Beiträge
 
#1

MIDAS TSocketConnection, Reconnect

  Alt 11. Sep 2014, 08:12
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
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#2

AW: MIDAS TSocketConnection, Reconnect

  Alt 11. Sep 2014, 09:00
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;
Ralph
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#3

AW: MIDAS TSocketConnection, Reconnect

  Alt 11. Sep 2014, 09:35
Delphi-Quellcode:
procedure TMain.ClientSocketError(Sender: TObject; Socket: TCustomWinSocket;
                                  ErrorEvent: TErrorEvent; var ErrorCode: Integer);
...
Die MIDAS TSocketConnection Klasse und TCustomWinSocket (TClientSocket / TServerSocket) haben zwar beide mit TCP, aber wenig miteinander zu tun. AFAIK verwendete MIDAS intern bereits Indy, so wie aktuell DataSnap.
Michael Justin
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: MIDAS TSocketConnection, Reconnect

  Alt 11. Sep 2014, 09:53
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.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#5

AW: MIDAS TSocketConnection, Reconnect

  Alt 11. Sep 2014, 10:04
Also wenn wem mal so eine Reconnectable TSocketConnection über den Weg läuft, immer her damit.
Wir haben bei MIDAS / DataSnap den Weg des geringsten Widerstands gewählt und schliessen die Verbindung unmittelbar wieder, sofort nach ClientDataSet.Open wird disconnected. Und nach dem Update auch. Das macht den Server natürlich nicht stabiler. Aber es kommt seltener zu Störungen als bei Verbindungen, die beim Programmstart geöffnet und bis zum Programmende offen gehalten werden. Briefcase Modell halt.
Michael Justin
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#6

AW: MIDAS TSocketConnection, Reconnect

  Alt 11. Sep 2014, 10:27
Delphi-Quellcode:
procedure TMain.ClientSocketError(Sender: TObject; Socket: TCustomWinSocket;
                                  ErrorEvent: TErrorEvent; var ErrorCode: Integer);
...
Die MIDAS TSocketConnection Klasse und TCustomWinSocket (TClientSocket / TServerSocket) haben zwar beide mit TCP, aber wenig miteinander zu tun. AFAIK verwendete MIDAS intern bereits Indy, so wie aktuell DataSnap.
Wer (MIDAS) lesen kann ist klar im Vorteil. Ich hatte mich schon gewundert was Dejan Vu da für eine triviale Frage stellt, sorry.
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz