Question

Je cherche à relier quelques applications ensemble (toutes écrites dans des langues différentes comme C #, C ++, Python) et je ne suis pas sûr de savoir comment s'y prendre.

Qu'est-ce que je veux dire en liant? Le système sur lequel je travaille se compose de petits programmes chargés chacun d'une tâche de traitement particulier. Je dois être en mesure de transférer un ensemble de données d'une application à l'autre facilement (l'ensemble de données en question n'est pas énorme, probablement quelques méga-octets) et j'ai besoin aussi une certaine forme de moyen de contrôler l'état actuel de l'opération (Ceci est où un modèle client-serveur sonne une cloche)

Il semble que les prises ou peut-être SOAP serait une solution universelle, mais je voulais juste obtenir des opinions quant à ce que les gens pensent à ce sujet.

Commentaires / suggestions seront appréciées, merci!

Était-ce utile?

La solution

Personnellement, je prends goût à omq . Il est une bibliothèque qui dispose d'une interface familière comme les sockets BSD pour faire passer des messages, mais vous trouverez qu'il met en œuvre des modèles intéressants pour la répartition des tâches.

On dirait que vous voulez organiser plusieurs processus dans un pipeline. Omq vous permet de le faire en utilisant des prises de poussée et sondage. (Et après, vous trouverez qu'il est même possible d'intensifier à travers de multiples processus et machines avec peu d'effort.) Jetez un oeil à la page Guide pour commencer, et le zmq_socket (3) manpage spécifiquement pour le fonctionnement de pousser et tirer.

Les liaisons sont disponibles pour toutes les langues que vous mentionnez.

En ce qui concerne le contenu du message, omq ne se préoccupe pas de cela, ils sont des blocs seulement de données brutes. Vous pouvez utiliser un format qui vous convient le mieux, comme JSON, ou peut-être Protocole buffers.

Ce que je ne suis pas est sûr de la « contrôle l'état » que vous mentionnez. Êtes-vous intéressé par, par exemple, l'annulation d'un emploi à mi-chemin?

Autres conseils

Pour C # C # vous pouvez utiliser Windows Communication Foundation . Vous pourrez peut-être utiliser avec Python et C ++ ainsi.

Vous pouvez également à la caisse pipes nommés.

Je penserait à passer à un modèle où vous éliminez la question en disposant de données centralisées que toutes les applications regardent. Gardez « une source de la vérité » pour ainsi dire.

La plupart des logiciels à l'extérieur a du mal contre liaison code de C, en raison de l'algorithme de nom-mutiler qu'il utilise pour ses symboles. Pour cette raison, lors de l'interfaçage avec des programmes écrits dans d'autres langues, il est souvent préférable de déclarer Enveloppement les choses comme extern "C" ou à l'intérieur d'un bloc extern "C" {.

  

Je dois être en mesure de transférer un ensemble de données d'une application à l'autre facilement (l'ensemble de données en question n'est pas énorme, probablement quelques méga-octets)

Utilisez le système de fichiers.

  

et j'ai besoin aussi une certaine forme de moyen de contrôler l'état actuel de l'opération

Encore une fois, utilisez le système de fichiers. Un fichier « current_state.json » avec un objet sérialisé JSON est parfait pour plusieurs langues à utiliser.

  

Il semble que les prises ou peut-être SOAP serait une solution universelle.

Peut-être. Mais il est trop pour ce genre de chose. Votre système d'exploitation a déjà tous les équipements dont vous avez besoin. Il suffit d'utiliser le système de fichiers. Il est très simple et très fiable.

Il y a plusieurs façons de faire la communication interprocessus. Comme vous l'avez dit, prises peut être une solution universelle. SOAP, je pense, est un peu un surpuissant. Vous pouvez également utiliser mailslots. J'ai écrit la demande de C en utilisant il y a quelques années. Les canaux nommés pourraient également être une solution, mais si vous codez sur Windows, il peut être difficile.

A mon avis:

  1. Prises
  2. Mailslots

sont les meilleurs candidats.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top