2009-04-20 5 views
4

J'écris un programme de comptabilité simple composé de plusieurs clients Winform C# et d'une application serveur Java qui lit/écrit des données dans une base de données. Une des exigences est que tous les clients C# doivent recevoir des mises à jour du serveur. Par exemple, si l'utilisateur a crée une nouvelle facture à partir de son client C#, les autres utilisateurs doivent voir cette nouvelle facture de leur client. Mon expérience concerne principalement le développement web et je ne sais pas quel est le meilleur moyen de satisfaire cette exigence avec le client C# et le serveur de servlets Java.Comment le serveur doit-il transmettre les données au client riche?

Mon initiale est cependant d'exécuter ActiveMQ avec Glassfish et d'utiliser la méthode pub/sub de messagerie afin que les mises à jour puissent être transmises au client C#. Je vais créer différents sujets comme newInvoice, cancelInvoice, etc. afin de différencier le type de message. Chaque message contiendra simplement l'objet codé en JSON.

Mais il me semble que cela demande beaucoup de travail. Étant donné que ma base d'utilisateurs est très petite (seulement 3 ou 4 utilisateurs simultanés), il me semble qu'il devrait y avoir des solutions plus simples. (Je ne connais pas bien la programmation des sockets :))

Je sais qu'il s'agit d'une programmation client-serveur de 101 questions mais ce serait génial si un programmeur expérimenté pouvait me diriger vers des solutions simples.

Répondre

5

L'approche la plus simple ici consiste souvent à utiliser simplement un sondage, c'est-à-dire que les clients interrogent les données chaque (votre intervalle de temps). Cela évite toute une série de problèmes (pare-feu, sécurité, visibilité directe, résolution, suivi des clients, etc.). Avec WCF, vous pouvez avoir des rappels sur les canaux duplex (permettant au serveur d'envoyer activement un message aux clients), mais cela est plus complexe. J'apprécie la simplicité, donc je fais simplement un sondage.

Les astuces qui aident à concevoir ici le système ont un mécanisme intégré pour interroger les «changements depuis x» - par exemple, une table d'audit, peut-être alimentée par des déclencheurs de base de données. Les détails exacts varient par projet, bien sûr.

ADO.NET Sync Services est une autre option que vous pourriez souhaiter examiner. cela fait beaucoup de ce que vous demandez, pour garder une copie locale de la base de données à jour avec le serveur - mais a quelques complexités propres. Ceci est disponible (IIRC) dans le modèle VS "Local Database Cache" VS.

0

Plutôt que de pousser les informations du serveur vers des clients 1: N, ne serait-il pas plus facile de demander aux clients d'interroger le serveur pour des mises à jour de temps en temps? Ou lorsque le client se lance et crée une connexion au serveur, le serveur peut générer dynamiquement une nouvelle file d'attente de messages pour cette connexion client, que le client peut ensuite interroger pour les mises à jour?

0

Vous disposez de plusieurs technologies Push, telles que ActiveMQ (comme vous l'avez mentionné) ou XMPP. Mais si vous n'avez que 3 ou 4 clients à traiter, le sondage serait la solution la plus simple. Ce n'est pas vraiment un problème dans votre cas, à moins que votre serveur soit un 8086 ou quelque chose de 8-)

0

Vous pouvez jeter un oeil à StreamHub Push Server - c'est un serveur Comet populaire écrit dans Java qui a un .NET Client SDK pour recevoir des mises à jour du serveur en C#. Il dispose également d'un SDK Java Client et de la prise en charge habituelle du navigateur Web Ajax/Comet, ce qui vous donne plus de flexibilité à l'avenir pour transmettre des données aux clients Web, Java et C#.

Questions connexes