Question

J'ai une application Delphi 2006 qui rassemble les données et l'affiche comme un résumé de plusieurs canaux, un canal par ligne sur un TDrawGrid. J'ai la même application en cours d'exécution sur d'autres ordinateurs sur le réseau, mais ces autres de PC sont des esclaves - ils ne recueillent pas de données, mais se contentent de fournir un affichage à distance du résumé

.

À l'heure actuelle, les esclaves montrent juste un imitateur de l'écran d'affichage de synthèse sur le maître, et cela est mis en œuvre par des émissions par voie de mailslots du maître.

Je veux mettre en œuvre ce d'une manière différente, afin de réduire la charge sur le maître, et de fournir les esclaves avec un peu plus de flexibilité et de l'indépendance sur la façon dont ils interprètent les données. Aussi, j'ai des problèmes avec la diffusion mailslot des données sur les sous-réseaux.

Puis-je utiliser un système de mémoire partagée pour mettre les données vers un fichier mappé en mémoire où les esclaves peuvent avoir accès de partout (sur le web, même)? Nous parlons d'une taille de mémoire de 100k octets max, par exemple, mis à jour par le maître à environ une fois par seconde, probablement dans un fil, pour garder la tâche de premier plan maître réactif.

Était-ce utile?

La solution

La façon la plus simple est d'utiliser un fichier sur un partage que le maître écrit et les esclaves en lecture seule. Une sorte de synchronisation peut être nécessaire, si vous voulez éviter « sale lit ». D'autre part, il ne pourrait pas la matière, selon le type de données que vous souhaitez afficher.

L'utilisation d'un fichier simple, a l'avantage qu'il ne nécessite aucun logiciel supplémentaire (par exemple un serveur daetabase ou un middleware) suivant le principe KISS. Mais bien sûr, il est loin d'être sexy ;-) et ne pas utiliser la technologie de mot à la mode correcte.

Autres conseils

mémoire partagée ne fonctionnera pas sur le Web (à moins que vous exécutez VPN) et il ne (peut être désynchronisé et vous ne pouvez pas les synchroniser vues à travers le réseau) fonctionnent pas bien sur le réseau en général.

Je peux voir plusieurs solutions à votre tâche:

Option 1. Utilisez middleware orienté message (MOM), tels que MSMQ, kbmMW, notre MsgConnect aux notifications de diffusion qui ne comprennent que des changements dans vos données. De cette façon, les clients ne sera pas nécessaire pour interroger le serveur pour plus instantané des données. Toutes les solutions de MOM utilisent des connexions TCP pour les opérations et cela est plus fiable que mailslots.

Option 2. Utilisez des SGBD client-serveur, probablement celui qui prend en charge les notifications aux clients (je ne suis pas un expert en DMBS donc je ne peux pas vous dire les noms).

Vous pouvez utiliser une base de données comme DBISAM, Firebird, etc .. Avec DBISAM, je l'ai utilisé une astuce de lire les 8 premiers octets du fichier de base de données qui semble être un en-tête. Si cela change, je sais que les données dans le tableau a changé, sinon il n'a pas. Vous pouvez utiliser ce dans le client si vous utilisez une boucle d'interrogation, ou si vous voulez continuer à utiliser les mailslots comme méthode de notification. à savoir interroger le fichier toutes les 10 secondes ou sur un avis mailslot, selon la première éventualité.

Quel est le problème avec l'aide de TCP / IP? Vous pouvez utiliser Indy (livré avec Delphi déjà) ou

Nous utilisons MSMQ pour quelque chose de similaire.

scroll top