Zeos Exception - schneller und abfangen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
baba
Beiträge: 265
Registriert: Mi 4. Apr 2007, 17:47

Zeos Exception - schneller und abfangen

Beitrag von baba »

Moin moin,

ich möchte folgendes erreichen:

Prüfen ob ein Postgres-SQL-Server erreichbar ist, und wenn nicht, eine Fehlermeldung ausgeben!

Zur Zeit wird erst nach ca. 15 Sekunden eine (Exception) ausgelöst.

Was aber noch wichtiger ist, dass Programm erweckt den Eindruck das es hängt, weil ca. 15 Sekunden nichts passiert.

/Postgres 8.3, Zeos 6.6.5

Code: Alles auswählen

ZCon1.Connect;
 
   //nach ca. 15 Sek. kommt hier die Exception!
 
   if ZCon1.Connected then begin
      ShowMessage('1');
   end else begin
      ShowMessage('2');
   end;
   ZCon1.Disconnect;
PS. Es gibt das ZCon1.Ping; - aber leider nur für MySQL.

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Zeos Exception - schneller und abfangen

Beitrag von Socke »

Gegen das hängen hilft nur ein Thread.

Die exception kann aber erst ausgelöst werden, wenn man weiß - oder annimmt-, dass der Server nicht da ist. Wenn der Server nicht da ist und deshalb nicht erreichbar, werden die TCP/IP-Pakete ins Netz geschoben, aber niemand antwortet. Es kann sein, dass der Server aber da ist, die Leitung aber nur sehr lange braucht. Deshalb wird (in deinem Fall) nach 15 Sekunden angenommen, dass der Server nicht da ist (auch wenn er da ist, aber erst nach 15,00001 Sekunden antwortet).

Das heißt, du hast alles richtig gemacht. Man kann ohne etwas zu tun, auch nicht das Ergebnis wissen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

baba
Beiträge: 265
Registriert: Mi 4. Apr 2007, 17:47

Re: Zeos Exception - schneller und abfangen

Beitrag von baba »

Socke hat geschrieben:Die exception kann aber erst ausgelöst werden, wenn man weiß - oder annimmt-, dass der Server nicht da ist.
... darum geht es ja! Wenn ich eine CONNECT versuche, dann ist ein Server, der nicht innerhalb von 3 Sekunden antwortet zu langsam und gehöhrt ausgetauscht oder neu konfiguriert. Das Timeout ist mir zu lang und ich suche eine Schraube, mittels der ich dieses verkürzen kann. Ein Thread hilft mir nur das System beweglich zu halten. Das ist wie mit einem Ping - die Antworten kommen im Millisekunden-Bereich. Wer will schon auf die Ping-Antwort 15 Sekunden warten?

Baba.

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Zeos Exception - schneller und abfangen

Beitrag von Socke »

baba hat geschrieben:
Socke hat geschrieben:Die exception kann aber erst ausgelöst werden, wenn man weiß - oder annimmt-, dass der Server nicht da ist.
... darum geht es ja! Wenn ich eine CONNECT versuche, dann ist ein Server, der nicht innerhalb von 3 Sekunden antwortet zu langsam und gehöhrt ausgetauscht oder neu konfiguriert. Das Timeout ist mir zu lang und ich suche eine Schraube, mittels der ich dieses verkürzen kann. Ein Thread hilft mir nur das System beweglich zu halten. Das ist wie mit einem Ping - die Antworten kommen im Millisekunden-Bereich. Wer will schon auf die Ping-Antwort 15 Sekunden warten?

Baba.
Da ich von Zeos kein Ahnung habe, empfehle ich eine evtl. vorhandene Dokumentation zu befragen oder in den Quellen nach "Timeout" zu suchen. Bei den Komponenten von Synapse (Netzwerk, nicht Datanbank) gibt es bspw. eine Eigenschaft um dies einzustellen (Standard: 5 Sekunden).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten