2008-10-30 22 views
5

Supongamos que está escribiendo una aplicación que debe implementar el protocolo HTTP. Los protocolos son bastante complejos y pueden permitir varios comandos según la etapa de la transacción en la que se encuentren.¿Cuál es la mejor manera de implementar protocolos?

Como ejemplo, observe SMTP. Un servidor SMTP debe generar un error si el comando "data" se envía antes de recibir "rcpt" y "mail".

Mi pregunta es: ¿cuál es la mejor manera de manejar protocolos como este en el código? ¿Hay algún patrón de diseño relacionado con esto?

Editar: Esta pregunta se relaciona con la teoría detrás de la implementación de protocolos. Soy consciente de que usar una biblioteca es el mejor enfoque en la práctica.

Respuesta

12

Máquinas de Estado

En mi opinión, una máquina de estados es la forma más fácil de modelar y gestionar protocolos. Un estado sería alcanzado por varias transiciones relacionadas con comandos válidos recibidos. Cada estado permitiría solo un cierto subconjunto de comandos.

Las máquinas de estados se utilizan en la construcción de compiladores para el análisis léxico de un programa. Veo el problema de la implementación del protocolo como un caso especial de esto.

1

La mejor manera de manejar protocolos como este es utilizar una biblioteca. Casi todos los lenguajes de computadora utilizados en la tierra tienen bibliotecas preexistentes y bien probadas para manejar http y smtp.

+1

A menos que desee desarrollar el controlador de protocolo como ejercicio, este es un buen consejo. Estas bibliotecas son genéricas y tienden a ser bien probadas. Eche un vistazo a la biblioteca estándar de Python para ver un ejemplo de este fenómeno. – ConcernedOfTunbridgeWells

+0

Gracias. Mi pregunta se relaciona más con cómo implementarlos como una pregunta teórica. Si necesito usarlos en la práctica, definitivamente usaré una biblioteca. – fluffels

-1

Estoy de acuerdo con A28, la mejor forma de hacerlo es o bien:

  • utilizar una biblioteca que implementa el servidor de protocolo
  • escribir una aplicación como una extensión de un servidor existente (por ejemplo, la extensión de servidor web a través de IIS , API de Apache, etc., Sendmail Milter, etc.) O
  • Modifique un servidor existente para realizar llamadas RPC a su aplicación a medida que recibe solicitudes.

Escribir su propia implementación del protocolo es probable que resulte en una implementación defectuosa con problemas de interoperabilidad.

Una herramienta interesante para hacer esto es twisted, que es específica de python pero bastante inteligente e incluye implementaciones de numerosos protocolos existentes (HTTP, SMTP, IRC, etc.).

Cuestiones relacionadas