Pregunta

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.

Como ejemplo, mira SMTP. Un servidor SMTP debe lanzar un error si los datos " datos " el comando se envía antes de recibir " rcpt " y " correo " ;.

Mi pregunta es: ¿cuál es la mejor manera de manejar protocolos como este en 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 los protocolos de implementación. Soy consciente de que usar una biblioteca es el mejor enfoque en la práctica.

¿Fue útil?

Solución

Máquinas de estado

En mi opinión, una máquina de estados es la forma más fácil de modelar y manejar protocolos. Se alcanzaría un estado mediante varias transiciones relacionadas con los comandos válidos recibidos. Cada estado permitiría entonces solo un cierto subconjunto de comandos.

Las máquinas de estado 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.

Otros consejos

La mejor manera de manejar protocolos como este es usar una biblioteca. Casi todos los lenguajes informáticos utilizados en la Tierra tienen bibliotecas preexistentes y bien probadas para manejar http y smtp.

@ fluffels @

Zed Shaw (autor de Mongrel) ; utiliza Ragel .

Estoy de acuerdo con a28, la mejor manera es:

  • Utilice una biblioteca que implemente el servidor de protocolo
  • Escriba su aplicación como una extensión a un servidor existente (por ejemplo, una extensión de servidor web a través de IIS, API de Apache, etc., Sendmail Milter, etc.) O
  • Modifique un servidor existente para hacer llamadas RPC a su aplicación cuando reciba solicitudes.

Es probable que la escritura de su propia implementación del protocolo resulte en una implementación defectuosa con problemas de interoperabilidad.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top