Question

Dites que vous écrivez une application qui doit implémenter le protocole HTTP. Les protocoles sont assez complexes et peuvent autoriser plusieurs commandes en fonction de l’étape de la transaction dans laquelle ils se trouvent.

Par exemple, regardez SMTP. Un serveur SMTP doit générer une erreur si le paramètre "données". La commande est envoyée avant de recevoir " rcpt " et "courrier".

Ma question est la suivante: quel est le meilleur moyen de gérer de tels protocoles dans un code? Existe-t-il des modèles de conception liés à cela?

Edit: Cette question concerne la théorie derrière la mise en œuvre de protocoles. Je suis conscient que l'utilisation d'une bibliothèque est la meilleure approche dans la pratique.

Était-ce utile?

La solution

Machines d'état

Selon moi, une machine à états est le moyen le plus simple de modéliser et de gérer des protocoles. Plusieurs transitions relatives à des commandes valides reçues atteindraient un état. Chaque état n'autoriserait alors qu'un certain sous-ensemble de commandes.

Les machines d'état sont utilisées dans la construction du compilateur pour l'analyse lexicale d'un programme. Je considère le problème de la mise en oeuvre du protocole comme un cas particulier.

Autres conseils

La meilleure façon de gérer des protocoles comme celui-ci consiste à utiliser une bibliothèque. Presque tous les langages informatiques utilisés sur Terre possèdent des bibliothèques préexistantes et bien testées pour gérer http et smtp.

@fluffels @

Zed Shaw (auteur de Mongrel) est d'accord avec vous ; il utilise Ragel .

Je suis d'accord avec a28, le meilleur moyen est soit:

  • Utiliser une bibliothèque qui implémente le serveur de protocole
  • Ecrivez votre application en tant qu'extension d'un serveur existant (par exemple, extension de serveur Web via IIS, API Apache, etc., Sendmail Milter, etc.) OU
  • Modifiez un serveur existant pour passer des appels RPC vers votre application lors de la réception de demandes.

L'écriture de votre propre implémentation du protocole risque d'entraîner une implémentation erronée avec des problèmes d'interopérabilité.

Un outil intéressant à cette fin est twisted , qui est spécifique à Python mais plutôt intelligent, et inclut des implémentations de nombreux protocoles existants (HTTP, SMTP, IRC, etc.).

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