Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TCP Client/Server Statusüberwachung (https://www.delphipraxis.net/69020-tcp-client-server-statusueberwachung.html)

Igotcha 9. Mai 2006 10:47


TCP Client/Server Statusüberwachung
 
Hallo zusammen,

ich benötige für meine Anwendung eine Lizenzkontrolle und entwickle gerade einen Lizenzserver für meine Multi-User-DB-Anwendung (modular aufgebaut).

Folgendes soll per TCP/IP passieren:

- beim Start des Clients soll überprüft werden, ob die freie Useranzahl in der Lizenz noch ausreicht, um einen Programmstart zuzulassen
- sofern ein Client connected ist, soll er sich regelmäßig beim Lizenzserver melden. Zum einen, damit klar ist, wieviel Clients gerade laufen und zur Überprüfung, ob ein Client evtl. verreckt ist, um diesen wieder freizugeben
- innerhalb des Clients startet der User "Module" (Pakckages), die quasi jeweils eine eigene Anwendung im Hauptclient (Rahmenprogramm) darstellen. Auch zu diesen Modulen gibt es Lizenzinformationen. Wie beim Client wird beim Aufruf eines Moduls geprüft, ob die maximale Userzahl für das Modul (bzw. eine Form in ihr) schon erreicht ist. Sofern der Start in Ordnung geht, meldet sich das Modul (bzw. die Form) auch regelmäßig beim Lizenzserver

Der Lizenzserver (als Service) ist soweit, dass er die Lizenzen aus einer DB einliest und verwaltet.

Mir stellt sich jetzt designtechnisch die Frage, wie ich die Statusmeldungen realisiere und da sehe ich 2 Möglichkeiten:

1. permanente Verbindung vom Start des Clients bis zur Beendigung
2. regelmäßige "Pingen" der Stati

Variante 1 hat aus meinem Empfinden den Nachteil, dass dann beim Server-Rechner n TCP-Verbindungen aufrecht erhalten werden (momentan nutzen maximal 30 User das System gleichzeitig, was aber nach oben hin offen sein kann).

Viele Grüße
Igotcha

supermuckl 9. Mai 2006 11:46

Re: TCP Client/Server Statusüberwachung
 
variante 1 ist kein problem für eine multible verbindung. da kommt bei einer idle verbindung so gut wie nur jede sekunde ein paket an (bei den indys), womit irgendwie ein timeout festgestellt wird.. ich weis nicht so genau wie und warum, aber es war schon paar mal so.

ausserdem hab ich die erfahrung gemacht, das wenn du eine verbindung hast, und die gekappt wird, das du dann nicht immer mitbekommst, das sie gekappt ist !

wenn ich z.b. das netzwerk unterbreche (und zwar so, das die netzwerkkarten noch am LAN hängen und nicht merken, das sie "in der luft hängen") dann gibt es keine tcp unterbrechung im server ! der client merkt es anscheinend - aber der server lässt die verbindung offen und denkt sich nix dabei.

ich hab das dann so gelöst (hatte auch eine multithreading tcp anwendung geschrieben, die die clients überwachen sollte auf verbindungsabbrüche), das ich alle 5 sekunden ein "ich lebe noch" vom client zum server geschickt hatte und im server alle x sekunden bzw minuten alle client-threads durchgegangen bin und geschaut hab, ob die letzte antwort bzw meldung nicht älter als x sekunden oder minuten war.. wenn dann wurde die verbindung terminiert (serverseitig) und der client war offline..

viel laberei um ein wenig erfahrung zu dem thema :)

Igotcha 9. Mai 2006 12:29

Re: TCP Client/Server Statusüberwachung
 
Ja, das mit dem "ich-lebe-noch" mache ich ja. Deshalb war ja gerade meine Frage "ständige Verbindung ja oder nein?"

Beispiel
Delphi-Quellcode:
CONNECT
LOGIN ERLAUBT?
Repeat until
   SENDE CLIENT ALIVE
   SENDE START MODUL X ERLAUBT?
   etc.
end
else
DISCONNECT

oder

CONNECT -> LOGIN ERLAUBT? -> ANTWORT TRUE/FALSE -> DISCONNECT
CONNECT -> SENDE ALIVE CLIENT -> DISCONNECT
CONNECT -> START MODUL X ERLAUBT? -> ANTWORT TRUE/FALSE -> DISCONNECT
etc.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:37 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