Hallöchen,
ich habe folgendes Szenario:
im Windowsnetzwerk müssen unter ca. 100 Clients zwei oder mehrere Workstations mit der gleichen Applikation zusammenarbeiten. Dabei fungiert das Terminal, an welchem die App. zuerst gestartet wird als Master, d.h. bestimmte Eintragungen dürfen nur dort vorgenommen werden. Das sind z.B. Personalnummern von Mitarbeitern, die an diesen Arbeitsplätzen als ein Team zusammenarbeiten. Arbeitsstationen, an denen das Programm später gestartet wird, sollen im Slave-Modus arbeiten, d.h. sie erhalten die relevanten Daten vom Master.
Während der Laufzeit können sich diese Daten ändern. Das erfordert, daß die Slaves immer ihre Einstellungen möglichst schnell vom Master beziehen.
Alle betreffenden Arbeitsstationen haben eine in einer DBF-Tabelle gespeicherte gemeinsame Band-ID.
Ich habe das Problem so gelöst, daß in dem gemeinsamen Arbeitsverzeichnis (letztendlich die Band-ID) für diese Stationen verschiedene Dateien liegen, über die der Abgleich erfolgt.
MASTER.XPF
SLAVExxxx.XPF mit xxxx, yyyy ID der jeweiligen Arbeisstation
SLAVEyyyy.XPF
TEAM.DBF
Neben diesen Dateien gibt es noch Erfassungsdateien für jede Arbeitsstation.
Beim Starten prüft die Applikation, ob eine MASTER.XPF vorhanden ist. Ist das nicht der Fall, wird diese angelegt. Die Applikation registriert sich als Master mit vollem Funktionsumfang. Zu einem späteren Zeitpunkt wird dann die TEAM.DBF angelegt.
Wird die Master-XPF vorgefunden, werden aus dieser einige MEMVARs ausgelesen. Die Datei SLAVExxxx.XPF wird angelegt. Diese enthält zwei Strings (Kommando und Zusatzinfo) zur Steuerung des Slaves.
Die Masterapplikation schreibt bei generellen Änderungen Daten in die TEAM.DBF oder Kommandos ind alle vorhandenen SLAVE-Dateien.
In einem eigenen Thread (im 1-Sekunden-Zyklus) überwacht der Slave sowohl seine eigene SLAVE-Datei als auch die Team.DBF. Bei Änderungen werden dann entsprechende Aktionen vorgenommen. Bei Kommandos wird nach der Aktion das Kommando aus der eigenen XPF-Datei entfernt.
Das Verfahren arbeitet bei mir im Testsystem stabil.
Nun meine Frage:
Hattet Ihr schon mal ein ähnliches Problem zu bewältigen?
Wie habt dieses gelöst oder wie würdet Ihr vorgehen?
Was mich an meiner Lösung stört:
Netzwerkzugriffe im Sekundentakt bei der Überprüfung von Datei-Datum, -Zeit und -Größe durch die Slave-Stationen.
Viele Grüße
Gerd
Master- und Slave-Apps
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 193
- Registriert: Fr, 09. Jun 2006 7:52
- Wohnort: Nähe Sömmerda
- Martin Altmann
- Foren-Administrator
- Beiträge: 16512
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Gerd,
ich weiß ja nicht, was Du an Zusatztools besitzt, bzw. ob Du die Professional Subskription hast.
Ich würde bei den Clients auf einem bestimmten Port auf eine Nachricht lauschen und vom Server an die Clients über den Port eine Nachricht senden, wenn sich was geändert hat (oder die geänderten Daten direkt übertragen).
Stichwort: TCP/IP-Sockets
Viele Grüße,
Martin
ich weiß ja nicht, was Du an Zusatztools besitzt, bzw. ob Du die Professional Subskription hast.
Ich würde bei den Clients auf einem bestimmten Port auf eine Nachricht lauschen und vom Server an die Clients über den Port eine Nachricht senden, wenn sich was geändert hat (oder die geänderten Daten direkt übertragen).
Stichwort: TCP/IP-Sockets
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hi,
Phil hat auf seiner Seite eine Datei mit Semaphoren unterstützung und die ASINET bietet direkte TCP/UTP Verbindungen an. Eventuell ist einer dieser Mechanismen geeigneter, ich habe damit aber keine Erfahrungen.
Es gab hier schon mal einen Thread der auf Phils Datei hinwies, ich meine es ging darum im Netzwerk die Lizenzverwaltung zu kontrollieren.
Der DBF Ansatz hat eventuell ein Problem wenn der Master abstürzt ohne, dass das Feld zurückgesetzt wird. Ich würde nur den Master Satz mit RLOCK sperren und von den anderen Stationen aus versuchen ob der immer noch gesperrt ist. Ansonsten wegen 3 oder 4 Rechnern im Netz würde ich mir keine Sorgen machen.
Phil hat auf seiner Seite eine Datei mit Semaphoren unterstützung und die ASINET bietet direkte TCP/UTP Verbindungen an. Eventuell ist einer dieser Mechanismen geeigneter, ich habe damit aber keine Erfahrungen.
Es gab hier schon mal einen Thread der auf Phils Datei hinwies, ich meine es ging darum im Netzwerk die Lizenzverwaltung zu kontrollieren.
Der DBF Ansatz hat eventuell ein Problem wenn der Master abstürzt ohne, dass das Feld zurückgesetzt wird. Ich würde nur den Master Satz mit RLOCK sperren und von den anderen Stationen aus versuchen ob der immer noch gesperrt ist. Ansonsten wegen 3 oder 4 Rechnern im Netz würde ich mir keine Sorgen machen.
Gruß
Hubert
Hubert
-
- Rekursionen-Architekt
- Beiträge: 193
- Registriert: Fr, 09. Jun 2006 7:52
- Wohnort: Nähe Sömmerda
Hallo Martin und Hubert,
vielen Dank für Eure Hinweise
Mit der Übertragung von Daten per TCP/IP habe ich mich bisher überhaupt noch nicht befaßt. Da fehlt mir im Moment auch die Zeit, da das Ganze in den nächsten Tagen schon funktionieren soll. Vielleicht habe ich später die Möglichkeit das Verfahren auszuwechseln.
Bezüglich eines möglichen Progammabsturzes des Masters habe ich dahingehend vorgebeugt, daß vor dem Start als Slave noch eine Sicherheitsabfrage bezüglich der aktuellen Masterinformationen eingeblendet wird. Damit kann ich ggf. die vorhandenen Informationen ignorieren und ein jungfäuliches Erfassungssystem starten.
Gruß
Gerd
vielen Dank für Eure Hinweise
Mit der Übertragung von Daten per TCP/IP habe ich mich bisher überhaupt noch nicht befaßt. Da fehlt mir im Moment auch die Zeit, da das Ganze in den nächsten Tagen schon funktionieren soll. Vielleicht habe ich später die Möglichkeit das Verfahren auszuwechseln.
Bezüglich eines möglichen Progammabsturzes des Masters habe ich dahingehend vorgebeugt, daß vor dem Start als Slave noch eine Sicherheitsabfrage bezüglich der aktuellen Masterinformationen eingeblendet wird. Damit kann ich ggf. die vorhandenen Informationen ignorieren und ein jungfäuliches Erfassungssystem starten.
Gruß
Gerd
-
- Rekursionen-Architekt
- Beiträge: 315
- Registriert: Mo, 16. Okt 2006 13:04
- Wohnort: Region Stuttgart