Каков наилучший способ реализации протоколов?

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

  •  05-07-2019
  •  | 
  •  

Вопрос

Допустим, вы пишете приложение, которое должно реализовывать протокол HTTP.Протоколы довольно сложны и могут допускать несколько команд в зависимости от того, на какой стадии транзакции они находятся.

В качестве примера рассмотрим SMTP.SMTP-сервер должен выдать ошибку, если команда "data" отправлена до получения "rcpt" и "mail".

Мой вопрос заключается в следующем:каков наилучший способ обработки таких протоколов, как этот, в коде?Существуют ли какие-либо шаблоны проектирования, связанные с этим?

Редактировать:Этот вопрос относится к теории, лежащей в основе реализации протоколов.Я знаю, что использование библиотеки - лучший подход на практике.

Это было полезно?

Решение

Государственные машины

На мой взгляд, конечный автомат - это самый простой способ для моделирования и обработки протоколов. Состояние будет достигнуто несколькими переходами, относящимися к полученным действительным командам. Каждое состояние будет разрешать только определенное подмножество команд.

Конечные автоматы используются в построении компилятора для лексического анализа программы. Я вижу проблему реализации протокола как частный случай этого.

Другие советы

Лучший способ обработки таких протоколов - использовать библиотеку. Почти каждый компьютерный язык, используемый на земле, имеет уже существующие, хорошо протестированные библиотеки для работы с http и smtp.

@флаффели@

Зед Шоу (автор книги "Монгрел") согласен с вами;он использует Раджель.

Я согласен с a28, лучший способ - это либо:

  • Используйте библиотеку, которая реализует сервер протоколов
  • Напишите свое приложение как расширение к существующему серверу (например,расширение веб-сервера через IIS, Apache API и т.д., Sendmail Milter и т.д.) Или
  • Измените существующий сервер, чтобы он выполнял RPC-вызовы вашего приложения по мере получения запросов.

Написание вашей собственной реализации протокола, скорее всего, приведет к ошибочной реализации с проблемами интероперабельности.

Интересным инструментом для этого является скрученный который специфичен для python, но довольно умен и включает в себя реализации многочисленных существующих протоколов (HTTP, SMTP, IRC и т.д.).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top