Сообщение запроса / ответа на витой питоне и передача существенных двоичных данных
Я пытаюсь реализовать сервер с использованием 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) для передачи больших объемов данных.