Quel est le meilleur moyen pour les processus distribués de communiquer de manière asynchrone?

StackOverflow https://stackoverflow.com/questions/632896

  •  08-07-2019
  •  | 
  •  

Question

Je développe une application dans laquelle les composants distribués se parlent via un réseau, de manière asynchrone, de type pub / sub.

Pour cela, j'aime bien l'idée d'envoyer du XML sur des sockets - c'est asynchrone, je n'ai besoin d'aucun serveur, et il peut fonctionner localement ou sur un réseau. Je devrais lancer mon propre mécanisme pub / sous, qui ne sera probablement pas trop onéreux - je pourrais utiliser l'adresse IP comme identifiant de l'abonné. Le langage d'implémentation sera C ++. J'ai déjà utilisé cette méthode avec de bons résultats. Mais, je me demande s'il y a une meilleure façon? Tout conseil bienvenu.

Edit: Je n'ai pas encore pris de décision, mais je suis intéressé par le commentaire de cparcode sur protobuf:

"Je n’ai jamais compris la popularité de l’utilisation de XML pour les communications réseau. Quoi qu'il en soit, je me rends compte que le protocole n’est qu’une partie de votre problème, mais à ce sujet, le protobuf de Google aussi: http://code.google.com/p/protobuf/ & # 8211; caparcode (11 mars à 1h01) "

Était-ce utile?

La solution

Au lieu d'utiliser XML, il peut être préférable d'utiliser un cadre existant de transmission de messages. Consultez libt2n ou d-bus

Mais si vous avez déjà utilisé votre propre implémentation de socket avec de bons résultats, je ne vois pas pourquoi vous devriez changer. Si ce n'est pas cassé ne le répare pas:)

Autres conseils

Au lieu de vous limiter aux sockets simples, vous pouvez envisager une solution comme AMQP .

Lorsque vous parlez d’utiliser des connexions de socket pour une interface pub / sub, cela signifie généralement une communication point à point, qui n’est pas toujours une solution évolutive. AMQP répond vraiment à ce type de problème de pub / sous C'est gratuit, c'est open-source, et ça marche.

Etant donné qu'ils ont déjà résolu le problème pub / sub, vous pouvez utiliser leur travail au lieu de le faire vous-même.

Je recommande OpenAMQ.

Cela étant dit, cela dépend vraiment du type d'environnement dans lequel vous travaillez. AMQP nécessite qu'un courtier AMQP (une application responsable de l'acheminement des messages) s'exécute quelque part dans le système.

Consultez ActiveMQ . Il s’agit d’un fournisseur JMS et propose également des liaisons dans de nombreuses autres langues, fonctionne sur plusieurs transports, et dispose d'une sélection de protocoles qu'il utilise pour ses messages.

RabbitMQ est également un courtier AMQP, qui prend également en charge d’autres protocoles tels que XMPP, HTTP, STOMP, SMTP, à l’aide d’adaptateurs.

Surtout si vous l'avez déjà fait et qu'il répond toujours à vos besoins, respectez-le.

Pourquoi ne pas intégrer un serveur Web dans votre application? EasyHTTPD est open source, C ++ et très simple à utiliser. La partie asynchrone est assez simple. Vous créez un nouveau fil sur l'expéditeur ou le destinataire.

Si vous recherchez XML et plusieurs plates-formes pour démarrer, vous pouvez envisager un mécanisme XML-RPC tel que SOAP (j’ai utilisé gSoap pour la communication entre un serveur C sous Linux et un client C ++ sous Win32, et cela a bien fonctionné une fois que vous avez tout compris).

Si vous n’êtes pas très enclin au XML et si vous souhaitez quelque chose de simple et d’efficace, envisagez YAMI. bibliothèque. Il est plutôt simple à utiliser et le lien indiqué contient suffisamment de documentation, de justifications et d’exemples pour démarrer.

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