Master- und Slave-Apps

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Gerd König
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 193
Registriert: Fr, 09. Jun 2006 7:52
Wohnort: Nähe Sömmerda

Master- und Slave-Apps

Beitrag von Gerd König »

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
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16512
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

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
:grommit:
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.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

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.
Gruß
Hubert
Gerd König
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 193
Registriert: Fr, 09. Jun 2006 7:52
Wohnort: Nähe Sömmerda

Beitrag von Gerd König »

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
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo Gerd,

ebenfalls auf Phil Ides site gibt es eine fix-und-fertige Client-Server-Lösung samt Beispielprogramm und Doku auf der Basis von Named Pipes (Nr. 19 auf der Liste). Habe ich zwar noch nicht benutzt, sieht aber m.E. sehr vielversprechend fur diesen Zweck aus.

Viele Grüße,
Günter
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Günter Beyes hat geschrieben:ebenfalls auf Phil Ides site gibt es eine fix-und-fertige Client-Server-Lösung samt Beispielprogramm und Doku auf der Basis von Named Pipes (Nr. 19 auf der Liste).
Danke, das hatte ich gemeint.
Gruß
Hubert
Antworten