Расширяемый формат сообщения узкой полосы - PullRequest
3 голосов
/ 09 июля 2009

Я собираю технический ответ на тендер, одним из требований которого является передача сообщений в расширяемом формате по сети с узкой полосой пропускания (10 байт / с или около того). Чтобы упростить жизнь на сервере, который будет получать информацию с тысяч устройств, я бы хотел использовать Xml. Чтобы помочь с проблемой пропускной способности, я мог бы использовать сжатый Xml, но данные поступают со встроенных устройств, которые могут не иметь возможности сжатия на лету. У кого-нибудь есть идеи получше, в идеале - небольшой расширяемый формат, который можно записать в Xml после получения сообщений по узкой полосе.

Ответы [ 5 ]

4 голосов
/ 09 июля 2009

Буферы протокола Google

Буферы протокола - это способ кодирования структурированных данных в эффективном, но расширяемом формате. Google использует буфер протоколов почти для всех своих внутренних протоколов RPC и форматов файлов.

0 голосов
/ 05 сентября 2011

Как правило, использование XML не облегчит жизнь сервера. Код синтаксического анализа XML является сложным, если вы используете какие-либо «функции» XML (пространства имен, сущности, экранирование, интернационализация и т. Д.), А синтаксический анализ XML обычно выполняется медленнее, чем анализ других форматов, таких как JSON. Вы можете написать простой кодер / декодер JSON на странице кода, тогда как XML и даже YAML потребуют большей сложности. Avro and Thrift и Google Protocol Buffers - хороший выбор, хотя вы будете увеличивать свою зависимость.

Если вы действительно ограничены 10 байтами в секунду, то вам, вероятно, понадобится кодировка, которая не имеет большого количества цитат или синтаксиса; ручной протокол с префиксом длины или что-то вроде двоичного кодирования protobuf - это, вероятно, то, что вам нужно.

0 голосов
/ 04 апреля 2011

Как уже говорили, Google Protocol Buffers или Apache Thrift являются очень популярными инструментами двоичной сериализации. Тем не менее, у них есть некоторые накладные расходы, потому что они помечают каждое поле (для достижения ограниченной формы обратной / прямой совместимости при изменении схемы).

Apache Avro не делает эту пометку и благодаря этому сэкономит вам немного больше места.

0 голосов
/ 14 июля 2009

Еще немного информации было бы полезно. Как указано, ответ может быть ASCII. Вы думали о передаче чисел, чисел, степеней, имен? Возможно, что-то более эзотерическое, как ASN.1. Или вы можете полностью сойти с ума, как с другими предложениями.

0 голосов
/ 09 июля 2009

YAML - очень краткий формат, идеально подходящий для передачи сериализованной информации между устройствами. Есть библиотеки, доступные для большинства языков программирования, поэтому сервер, вероятно, мог бы понять это напрямую, и не было бы никакой необходимости конвертировать в XML.

...