communication entre Java et C #

J’ai découvert qu’il existe une boîte à outils .Net appelée GCT – Group Communication Toolkit, qui correspond à la version C # de JGroup. Je veux savoir si ceci et JGroup peuvent être connectés ensemble pour permettre aux clients java et C # de communiquer entre eux. Sinon, quelle serait la meilleure option pour faire communiquer un programme java et un programme C #? Une autre option que j’ai rencontrée est l’implémentation XMPP. J’ai besoin d’un message très rapide qui passe entre ces deux programmes exécutés sur le même ordinateur. La principale exigence est que l’un ou l’autre de ces programmes envoie un message à l’autre, lorsque certains événements particuliers sont déclenchés. toutes les idées sont les bienvenues.

XMPP n’est pas ce que vous voulez. Il est conçu pour la transmission de messages entre ordinateurs disposant d’un serveur central.

Je recommanderais d’utiliser des sockets pour transmettre des données entre les applications. Voir la classe System.Net.Sockets.Socket en C # et la classe java.net.Socket en Java.

Où je travaille, nous utilisons ICE ( http://www.zeroc.com/ ). Cela nous permet de rassembler des données binarys entre java et c #. Ce n’est pas mauvais.

Répondre à la “réponse” du PO …

Pour mapper le “serveur serveur” sur le modèle RPC classique (par exemple, tel que implémenté par CORBA, SOAP, ICE, RMI, etc.), vous devez inverser le rôle de sorte que le rôle que vous considérez comme votre serveur remplisse le rôle de client dans le RPC. Le motif est comme ça:

  1. Votre client appelle votre serveur en lui transmettant le descripteur d’un object de rappel.

  2. Le serveur se souvient de l’object de rappel et retourne.

  3. Le client s’endort (ou fait autre chose …)

Plus tard, le serveur veut pousser des données.

  1. Le serveur appelle le RPC “push” sur l’object de rappel, en transmettant les données.

  2. Le client reçoit l’appel / la demande sur l’object de rappel, fait quelque chose avec les données et répond.

Si je faisais cela et que j’avais besoin d’une faible latence, je pourrais envisager un fichier mappé en mémoire ou un canal. L’une ou l’autre de ces applications nécessiterait une programmation JNI et p / invoke.

Les tampons de protocole de Google pourraient être une option. C’est très portable et assez rapide.

Si les performances sont importantes, voyez ce qui est utilisé en informatique scientifique. Les scientifiques ont le même type de problèmes que ceux rencontrés dans les entresockets, qui ont besoin de connecter des clients et des serveurs, entre autres, dans un plus grand nombre de langues et de plates-formes. Peut-être que cet outil de liaison de composant appelé Babel serait utile au-delà de son domaine d’origine? Les interfaces sont décrites par SIDL (comme IDL dans CORBA), mais je ne sais pas si C # est encore couvert. https://computation.llnl.gov/casc/components/babel.html

Je n’aurais peut-être pas précisé l’exigence. Je recherche une technologie serveur push, plutôt que client. Je ne suis donc pas sûr que les solutions ci-dessus fonctionneraient. Mon code C # surveille un environnement et gère certains événements générés dans cet environnement. Lorsqu’un événement est généré, j’enregistre des informations. Cette information que je veux envoyer à mon code java. Comme vous pouvez le constater, le code C # doit agir comme un serveur qui transfère les données vers un client java, chaque fois qu’un événement particulier se produit. De plus, il n’y a qu’un serveur et un client, fonctionnant sur le même ordinateur, il n’y a donc aucun problème d’évolutivité. La seule préoccupation serait la performance, car les événements sont générés à une vitesse de 0,01 seconde. C’est pourquoi j’ai pensé à XMPP.