AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TCP Client/Server Statusüberwachung
Thema durchsuchen
Ansicht
Themen-Optionen

TCP Client/Server Statusüberwachung

Ein Thema von Igotcha · begonnen am 9. Mai 2006 · letzter Beitrag vom 9. Mai 2006
Antwort Antwort
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#1

TCP Client/Server Statusüberwachung

  Alt 9. Mai 2006, 11:47
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
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#2

Re: TCP Client/Server Statusüberwachung

  Alt 9. Mai 2006, 12:46
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
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#3

Re: TCP Client/Server Statusüberwachung

  Alt 9. Mai 2006, 13:29
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.
  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 02:55 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