Сообщение запроса / ответа на витой питоне и передача существенных двоичных данных

Я пытаюсь реализовать сервер с использованием Python-витой с потенциальными клиентами C# и ObjC. Я начал с LineReceiver, и он хорошо работает для базовых сообщений, но я не могу найти лучший подход для чего-то более надежного. Есть идеи для простого решения для следующих требований?

  • Запрос и ответ
    • ех. отправить сообщение, чтобы получить статус, получить статус обратно
  • Получать двоичные данные (нетривиально, но не массово - менее нескольких мегабайт)
    • ех. байты небольшого файла png

AMP кажется приемлемым решением для первого сценария, но может не справиться с размером сценария передачи данных.

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

1 ответ

Решение

Мне очень нравится AMP. twisted.protocols.amp является умеренно функциональным и относительно легко тестируемым (хотя документации по тестированию приложений, написанных с его помощью, немного не хватает).

Абстракция команды / ответа, которую обеспечивает AMP, удобна и знакома (в конце концов, мы живем в мире, где победил HTTP). AMP избегает ловушки чрезмерной сложности (по-видимому, ради сложности), в которую SOAP попала прямо. Но это не так просто, вы не сможете сделать работу с ним (например, LineReceiver скорее всего есть).

Есть промежуточные этапы - например, twisted.protocols.basic.Int32Receiver дает вам более сложный механизм кадрирования (префиксы 32-битной длины вместо магически-байтовых-концевых линий), но, на мой взгляд, AMP - действительно хороший первый выбор для протокола. Вы можете обнаружить, что хотите переключиться на что-то другое позже (один размер действительно не подходит для всех), но AMP находится в выгодном месте между функциями и простотой, что кажется подходящим для очень широкого спектра приложений.

Это правда, что в AMP есть некоторые встроенные ограничения по длине. Это давнее больное место, которое просто ждет кого-то с реальной потребностью в решении этой проблемы.:) Существует довольно хорошо продуманный дизайн для снятия этого ограничения (без нарушения совместимости протокола!). Если AMP кажется вам привлекательным, тогда я призываю вас привлечь сообщество разработчиков Twisted, чтобы выяснить, как вы можете помочь сделать это реальностью.;)

Также всегда есть возможность использовать AMP для обмена сообщениями и настроить другой канал (например, HTTP) для передачи больших объемов данных.

Другие вопросы по тегам