Frage

Ich habe eine Delphi 2006 app, dass Raffungen Daten und zeigt sie als eine Zusammenfassung der vielen Kanäle, ein Kanal pro Zeile auf einem TDrawGrid. Ich habe die gleiche App auf verschiedenen anderen PC im Netzwerk ausgeführt wird, aber diese anderen PCs sind Sklaven - sie keine Daten sammeln, sondern lediglich eine Fernanzeige der Zusammenfassung liefern

.

Derzeit ist die Sklaven zeigen nur eine Mimik des Zusammenfassung Bildschirm auf dem Master, und dies über Sendungen anhand von Mailslots vom Master implementiert.

Ich möchte dies implementieren in einer anderen Art und Weise, um die Last auf dem Master zu reduzieren, und bieten die Sklaven mit einem bisschen mehr Flexibilität und Unabhängigkeit, wie sie die Daten zu interpretieren. Außerdem bin ich Probleme mit Mail-Fach-Übertragung der Daten über mehrere Subnetze mit.

Kann ich ein Shared-Memory-Schema die Daten festgelegt wird auf eine Memory-Mapped-Datei, in der die Slaves Zugriff von überall haben kann (über das Internet, auch)? Wir sprechen über eine Speichergröße von 100k Bytes max, sagt sie, bei etwa einmal pro Sekunde vom Master aktualisiert, wahrscheinlich in einem Thread, die Master Vordergrund Aufgabe ansprechbar zu halten.

War es hilfreich?

Lösung

Der einfachste Weg ist mit einer Datei auf einer Freigabe, dass der Master schreibt und die Sklaven nur lesen. Eine Art Synchronisation erforderlich sein, wenn Sie „Dirty Reads“ verhindern wollen. Auf der anderen Seite, es könnte keine Rolle, abhängig von der Art der Daten, die angezeigt werden sollen.

eine einfache Datei hat den Vorteil, dass es keine zusätzliche Software erforderlich ist (beispielsweise ein daetabase Server oder eine Middleware) nach dem KISS-Prinzip. Aber natürlich ist es weit von sexy ist ;-) und verwendet nicht die richtige Buzzword-Technologie.

Andere Tipps

Shared Memory nicht Web arbeitet über (es sei denn, Sie VPN laufen) und es funktioniert nicht gut über das Netzwerk im Allgemeinen (Ansichten desynchronisiert werden kann, und man kann sich nicht über das Netzwerk synchronisieren).

kann ich mehrere Lösungen für Ihre Aufgabe finden Sie unter:

Option 1. Verwenden Sie Message Oriented Middleware (MOM), wie MSMQ, kbmMW, unsere MsgConnect zu Broadcast-Meldungen, die nur enthalten Änderungen in Ihren Daten. Auf diese Weise die Clients nicht auf den Server abfragen, müssen zusätzlich zur Datenmomentaufnahme. Alle MOM-Lösungen verwenden TCP-Verbindungen für den Betrieb und das ist viel zuverlässiger als Mailslots.

Option 2. Verwenden Sie einige Client-Server-DBMS, wahrscheinlich derjenige, der Benachrichtigungen an Kunden unterstützt (ich bin kein Experte in DMBS so dass ich Ihnen die Namen nicht sagen kann).

Sie können eine Datenbank wie DBISAM, Firebird, etc. verwenden .. Mit DBISAM habe ich einen Trick des Lesens der ersten 8 Bytes der Datenbankdatei verwendet, die einen Header zu sein scheint. Wenn sie sich ändert, weiß ich, dass die Daten in der Tabelle geändert hat, sonst hat es nicht. Sie können dies in der Client verwenden, wenn Sie eine Abfrageschleife verwenden, oder wenn Sie die Mailslots als Benachrichtigungsmethode verwenden möchten, um fortzufahren. das heißt die Datei Meldung alle 10 Sekunden oder der Mail-Fach abfragen, was zuerst eintritt.

Was bei der Verwendung von TCP / IP falsch? Sie können verwenden Indy (Schiffe mit Delphi bereits) oder

Wir verwenden MSMQ für etwas ähnliches.

scroll top