Quel protocole devrais-je utiliser pour les interactions commande / réponse rapides?

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

  •  06-07-2019
  •  | 
  •  

Question

Je dois configurer un protocole pour des interactions rapides de commande / réponse. Mon instinct me dit de combiner un protocole simple avec des chaînes ascii séparées au format CRLF, comme le mode de fonctionnement de SMTP ou POP3, et de le transférer via SSH / SSL si j’ai besoin de le sécuriser.

Bien que je puisse simplement faire cela, je préférerais utiliser une technologie existante afin que les utilisateurs puissent utiliser une bibliothèque conviviale plutôt que l'interface de bibliothèque de socket fournie par le système d'exploitation.

j'ai besoin de ...

  • Les commandes et les réponses transmettant des données structurées dans les deux sens. (XML, expressions S, ça ne fait rien.)
  • Possibilité pour le serveur d'envoyer des notifications non planifiées au client sans être interrogé.

Des idées s'il vous plaît?

Était-ce utile?

La solution

L’AMQP semble prometteur. Alternativement, je pense que XMPP prend en charge une grande partie de ce que vous voulez, mais avec un peu de surcharge.

Cela dit, selon ce que vous essayez d'accomplir, un simple protocole ad hoc pourrait être plus facile.

Autres conseils

Si vous voulez juste une requête / réponse, HTTP est très simple. C'est déjà un protocole de requête / réponse. Les côtés client et serveur sont largement implémentés dans la plupart des langues. L'agrandissement est bien compris.

La méthode la plus simple consiste à envoyer des commandes au serveur sous forme de demandes POST et à ce que le serveur renvoie la réponse dans le corps de la réponse. Vous pouvez également étendre le protocole HTTP avec vos propres verbes, mais cela faciliterait la tâche pour tirer parti de la mise en cache des proxy et de toute autre infrastructure comprenant le protocole HTTP.

Si vous souhaitez des notifications asynchrones, examinez les protocoles pub / sub (Spread, implémentations XMPP, AMQP, JMS ou courtiers commerciaux de messages pub / sub tels que TibcoRV, Tibco EMS ou Websphere MQ). Le protocole ou l’implémentation à choisir dépend des besoins en fiabilité, en temps de latence et en débit du système que vous construisez. Par exemple, est-il possible de supprimer les notifications lorsque le réseau est congestionné? Qu'advient-il des notifications lorsqu'un client est hors ligne? Sont-elles ignorées ou mises en file d'attente lors de la reconnexion du client?

Que diriez-vous de quelque chose comme SNMP? Je ne sais pas si cela correspond exactement au modèle utilisé par votre application, mais cela prend en charge les notifications asynchrones et les opérations d'extraction (c'est-à-dire, TRAP et GET).

C'est une excellente question avec un grand nombre de variables à prendre en compte. La question n'en mentionnait que quelques-unes: le format de paquet, la messagerie asynchrone ou synchronisée et la sécurité. On pourrait penser à beaucoup d'autres. Je suggère de passer en revue la description de la pile de protocoles à 7 couches (OSI / ISO) et de vous demander ce dont vous avez besoin au niveau de ces couches et si vous souhaitez construire cette couche ou l’obtenir ailleurs. (Vous semblez surtout intéressé par les couches 6 et 7, mais également par les bits des couches inférieures.)

Déterminez également s'il s'agit d'une application critique pour la sécurité ou d'une partie d'un système avec V & V formel. Les systèmes de communication vraiment bons et fiables ne sont pas faciles à concevoir; également un "sous-alimenté" Le protocole peut imposer aux applications une lourde charge de codage pour la récupération sur erreur.

Enfin, je suggérerais de regarder comment d’autres applications similaires au vôtre font le travail (vérifier les sources ouvertes, lire des livres, etc.). La base de données de l’Office des brevets des États-Unis, etc. il suffit de lire la description du problème de communication qu’ils tentaient de résoudre pour obtenir de bonnes idées.

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