Дизайн протокола - PullRequest
       20

Дизайн протокола

1 голос
/ 26 ноября 2010

У меня есть клиент-серверная программа для связи ПК с телефоном Android с использованием USB, основанная на http://www.anothem.net/archives/2010/10/15/android-usb-connection-to-pc/

Теперь мне нужно разработать протокол, который облегчает обмен информацией от ПК к телефону.Как я должен идти об этом?Должны ли мы использовать XML для этого?Я смотрел на буфер протокола Google .. Это правильное направление?

Спасибо, Кэролайн

Ответы [ 2 ]

4 голосов
/ 28 ноября 2010

Я использую буферы протокола на Android. Я долго избегал этого, полагая, что это было излишним. Это было до того, как я потратил полдня, чтобы опробовать его.

Вот мои результаты после проведенного на нем дня. Сначала он увеличил размер моего APK с 2,89 до 3,1 мегабайта. Я считаю это несущественным. Затем я обнаружил, что могу удалить код, который у меня был повсюду, где я выполнял синтаксический анализ вручную. Мне удалось удалить код, который требовал ввода данных в определенной последовательности.

Затем я смог полностью удалить несколько классов, которые у меня были в моем приложении, цель которых состояла в том, чтобы служить временными, легкими только для информации «модельными» классами, которые представляли данные, поступающие в поток данных или из него. Короче говоря, все стало проще, меньше и надежнее.

Протоколные буферы вполне могут быть не лучшим решением для вашей ситуации. Но я рекомендую вам потратить несколько часов и попробовать. Таким образом, вы примете решение оставить его позади с позиции силы и знаний.

Обязательно используйте облегченную версию буферов протокола. Файл .jar имеет размер 160 Кб, но объем его функциональности огромен. Я буду использовать его все время с этого момента.

У меня есть некоторые опасения по поводу динамического выделения памяти / сбора мусора при использовании его в игровом контексте в долгосрочной перспективе. Но сейчас сериализация происходит достаточно редко, поэтому для меня это не проблема.

Еще один бонус: у меня есть некоторый код Python, который генерирует файлы данных, которые читает приложение. Этот код Python обрабатывает некоторый XML, а затем генерирует двоичные файлы. Я думаю, что смогу полностью устранить этот код, используя текстовый режим буфера протокола, а затем напрямую используя protoc для создания двоичных файлов.

3 голосов
/ 26 ноября 2010

Сначала вам нужно спроектировать верхний уровень вашего протокола.Буферы Xml и протокола имеют отношение к форматированию данных.В зависимости от того, какие данные вам нужно обменять, они могут подходить или не подходить.Из того, что вы делаете в своем комментарии, кажется, что вы хотите разработать что-то вроде пульта дистанционного управления для вашего ПК.В этом случае и XML, и Google Protocol Buffers будут чрезмерным дизайном.Просто создайте текстовый протокол, выделите один или два байта для типа команды и несколько байтов для тела данных.

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

...