2010-06-21 15 views
3

J'ai plusieurs processus dans mon système qui doivent communiquer entre eux.Besoin d'aide pour la conception d'une couche de communication inter-processus

Certains des processus doivent transmettre des segments de données 60 fois par seconde en continu, et certains sont très sporadiques.

La plupart des processus sont en C#, l'un est en C++.

Tous fonctionnant sur la même machine Windows 7.

À l'heure actuelle, chaque processus a sa propre implémentation de communication (canalisations, événements et sockets). Je cherche à unifier en une seule couche de communication.

  • Comment implémenteriez-vous cela?
  • Peut-être une sorte de diffusion avec le destinataire prévu comme en-tête?
  • Quelle méthode de communication de processus choisiriez-vous?

Merci,

SW

+0

Je suppose que ce ne sont pas toutes des instances du même processus? Si oui, quel est le point commun entre les «morceaux de données» qu'ils communiquent? – torak

+0

Non, différents processus faisant des choses différentes. Je ne comprends pas la question de la communalité. –

+0

La raison pour laquelle je vous demande est de parler de la consolidation en une seule couche.Tous les processus de différence envoyaient le même type d'information les uns des autres, alors l'ajout d'une autre couche est plus logique, du point de vue du partage de code au moins. – torak

Répondre

1

Je suggère d'utiliser ICE, qui prend en charge les objets distants et le passage des messages. Il n'aura aucun problème pour répondre à vos tarifs et vos besoins en bande passante. Il est également multi-plateforme et prend en charge d'autres langages que C# ou C++, vous donnant plus de choix de langues pour les autres composants.

1

J'utilise un service WCF pour communiquer entre les processus .Net et processus .Net et Java. J'ai trouvé que la WCF était un moyen très facile d'atteindre ce but.

+0

Semble très intéressant, deux questions: 1. peut-il gérer les données de passage à 60hz, 2. Est-ce que ça va bien jouer avec C++? –

+0

Je ne suis pas vraiment au courant de l'une ou l'autre question. La mise en œuvre de la communication entre deux processus .Net peut utiliser des tuyaux pour communiquer, donc je pense qu'il peut gérer le taux de thar. Pour la communication entre .Net et Java, j'utilise TCP/IP donc je ne sais pas si ça marche bien à ce rythme. A propos de la deuxième question, je pense que vous n'aurez pas de problèmes si vous avez une belle bibliothèque WebService. J'envoie des objets entre .Net et Java et ils sont (de) sérialisés dans/depuis XML sans problème. Mais je n'ai pas essayé avec C++. – jpsstavares

1

Jetez un coup d'oeil à MSMQ. C'est à base de socket et assez rapide. Cet article explique comment l'utiliser à partir de C++: http://msdn.microsoft.com/en-us/library/ms811055.aspx.

Vous n'avez pas non plus mentionné si votre communication est synchrone ou asynchrone (l'auteur doit-il attendre une réponse du lecteur?). Avez-vous plusieurs écrivains et lecteurs? Est-ce une constante de 60 Hz ou est-ce que ça vient avec des bouquets de respiration où les lecteurs peuvent rattraper les écrivains?

Une table de base de données peut également être utilisée en tant que file d'attente et présente l'avantage de conserver les messages si le système plante. Un moteur embarqué à faible surcharge comme Sqlite est bien adapté pour cela.

0

Notez que les solutions middleware de messagerie (comme WCF et ICE) sont des moteurs puissants qui vous donne des fonctionnalités telles que la livraison fiable des messages, le contrôle de commande de message, distribué (multi-machines) capacité, etc.

Ils sont relativement complexes et peut impliquer un certain degré d'apprentissage «cadre».

Si votre application fonctionne actuellement de manière fiable, il peut être judicieux de présenter la solution de messagerie que vous avez choisie pour votre nouvelle fonctionnalité initiale et de le prouver d'abord. Vous pourriez ensuite modifier vos processus existants (si ...) et si nécessaire.