2009-08-16 9 views
1

Je veux construire une application Win32 Client/Serveur (ou 3 niveaux) type avec des fonctionnalités de suivi:La communication entre les clients de Delphi 2009

  • Lorsque le client "A" fait une modification (mise à jour, insérer, etc) dans une base de données, le reste des clients visualisent la même jeu d'enregistrements peut obtenir presque « instantanément » une vue nouvelle de ces données
  • un client peut être averti quand une connexion à la base de données se perdre

quelqu'un pourrait Aidez moi? Merci à l'avance

PDTA: Ma base de données est MySQL 5.1

Répondre

2

Notez qu'en faisant cela, et ayant beaucoup de clients, vous obtiendrez potentiellement beaucoup de trafic réseau. C'est exactement la raison pour laquelle la plupart des applications client-serveur ne le font pas.

Si vous voulez vraiment faire cela, alors le bon est de mettre en œuvre le «modèle d'observateur»; un exemple de base sur ce modèle de conception dans Delphi has been described by Joanna Carter dans son blog.

Ensuite, vous devez étendre ce modèle pour qu'il fonctionne sur un réseau. Donc, au moins, vous avez besoin d'un processus serveur qui gère l'interface "sujet". Vous pouvez utiliser quoi que ce soit pour cela: WebServices, DataSnap serveurs, RemObjects SDK, etc.

La plupart des gens veulent une solution comme celui-ci, vont de l'application client/serveur traditionnel dans une application à plusieurs niveaux. Ensuite, le niveau intermédiaire peut gérer toutes les notifications pour vous.

-1

Si MySQL ne marche pas le soutien somekind de pousser info ou attatching clients dont vous auriez besoin d'utiliser une course de niveau intermédiaire sur un serveur. Ce serveur assure le suivi des clients connectés. Mais ce serait probablement un sacré boulot. Je sais que les éditions "plus grandes" de Delphi ont un certain support de la construction de ce type de logiciel client/serveur.

-1

Je sais que cela n'a rien à voir avec votre application, mais Firebird a une fonctionnalité intéressante pour faire exactement cela. Vous pouvez en lire plus à leur sujet here (lien vers un PDF). Maintenant, si vous avez besoin de faire cela avec MySQL et Delphi, le moyen le plus simple que je puisse penser est de faire quelque chose "AJAX LIKE" sur votre application Win32. C'est avoir une application côté serveur (vous pouvez utiliser un serveur Web avec PHP, Java, .NET ou tout ce que vous voulez) qui servira vos demandes de mises à jour de données. Sur l'application côté serveur, faites simplement une requête demandant des modifications dans votre base de données MySQL.

Espérons que ça aide.

2

Ma réponse dépend de l'architecture de votre réseau mais j'ai tendance à utiliser l'IP pour ce type de choses. Quelque chose comme Multicast est un moyen idéal pour informer tous les clients sur le réseau d'un événement. Il suffit de multi-cast ou de diffusion (UDP) l'ID de l'enregistrement mis à jour peut être tout ce qui est nécessaire. Si un autre client est intéressé par l'enregistrement, il peut ensuite l'actualiser à partir de la base de données.

Les composants Indy Multicast Client/Server fourniront un moyen simple d'implémenter ceci dans votre application.

+1

Nous avons utilisé quelque chose de similaire (mais grossièrement sur-machiné) chez un employeur précédent. Il suffit probablement d'envoyer un identifiant de table, un identifiant d'enregistrement et une opération (ajouter/mettre à jour/supprimer). –

+1

multi-cast ne fonctionnera que sur votre LAN local (et seulement si les commutateurs transmettent des paquets multi-cast); Billiardo devrait utiliser le modèle d'observateur. –

0

Si vous avez une application de type trois niveaux, le client communique avec le serveur d'application. Cette connexion pourrait utiliser des rappels aux clients pour les informer des événements importants. DataSnap prend en charge les rappels (également les notifications de changement de données).

Si vous créez votre propre serveur d'applications. le client peut ouvrir une connexion socket au serveur (dans un thread) et écouter les notifications d'événements. L'exemple de client Indy Telnet dans Protocols/IdTelnet.pas est un bon point de départ pour créer une implémentation de notification très simple. Il utilise la classe TIdTelnetReadThread pour écouter les réponses du serveur aux négociations d'entrée et de protocole. Si votre application doit s'exécuter dans des environnements Terminal Server, où les ports ne seront pas virtualisés AFAIK, il est plus sûr de se connecter du client au serveur (au lieu d'ouvrir les ports socket client pour la communication peer-to-peer).

Questions connexes