Замена XML - PullRequest
       6

Замена XML

0 голосов
/ 16 ноября 2010

У меня есть серверное приложение, которое я переписываю на C ++, и оно использовало XML для отправки данных клиенту / от клиента. Я обнаружил, что реализовывать XML очень сложно, даже используя существующие библиотеки. Кажется, что иногда это просто противоречит интуиции, а библиотека C ++, которую я использовал, кажется слишком сложной.

Мне было интересно, знает ли кто-нибудь более эффективные способы передачи данных от клиента к серверу и обратно более простым и интуитивно понятным способом, чем анализ XML. Данные состоят в основном только из базовых типов.

Я подумал, может быть, просто использовать структуру с необходимыми типами данных и просто отправить ее через необработанный сокет.

Я потратил столько времени на это, это нереально.

Ответы [ 5 ]

7 голосов
/ 16 ноября 2010

Как сказал duffymo , JSON идеально подходит для того, что вы пытаетесь сделать. Чтобы добавить к его ответу, он имеет здоровое представление на многих языках (я знаю, что XML делает то же самое, но суть здесь в том, что OP считает, что XML - это боль для простых типов данных).

Подробнее о JSON можно узнать по адресу http://www.json.org/. В нижней части этой страницы приведены ссылки на реализации для различных языков (включая C ++, например: http://sourceforge.net/projects/jsoncpp/).

Проще говоря, JSON означает JavaScript Object Notation и представляет собой простой способ описания объектов. Адрес может быть представлен следующим образом:

{
    "address1" : "5, The Green",
    "address2" : "Some Street",
    "town"     : "JsonVille"
}

Поддерживаются массивы:

{
    "address1" : "5, The Green",
    "address2" : "Some Street",
    "town"     : "JsonVille"
    "occupants": ["olivia", "newton", "john"]
}

И более сложные объекты:

{
    "address1" : "5, The Green",
    "address2" : "Some Street",
    "town"     : "JsonVille"
    "occupants": [{"name" : "Olivia",
                   "age"  : 24
                 },{"name" : "Newton",
                    "age"  : 32
                 },{"name" : "John",
                    "age"  : 42}
                 ]
}

РЕДАКТИРОВАТЬ: синтаксическая ошибка:)

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

Я бы попробовал JSON или буферы протокола Google, чтобы посмотреть, работают ли они на вас.

2 голосов
/ 16 ноября 2010

Я бы посмотрел на DBus как на протокол, так как он довольно стандартный.

0 голосов
/ 16 ноября 2010

Если все, что вы делаете, это отправляете данные по сети - вам на самом деле не нужно редактируемое текстовое представление, такое как XML или JSON - тогда взгляните на boost :: serialization.

0 голосов
/ 16 ноября 2010

Есть несколько альтернатив в зависимости от ваших потребностей.

Очевидно, что лучшей альтернативой для ориентированной на производительность передачи сетевых данных может быть Google Protobuf.Однако использовать его явно не так просто, как любой другой вариант, который я вам дам, потому что он явно сделан для того, чтобы быть эффективным, не читаемым человеком и т. Д.

Для данных, читаемых человеком, есть:

  • JSON
  • YAML (хотя все языки имеют хотя бы одну реализацию синтаксического анализатора)
  • Формат INFO, предоставляемый boost :: property_tree
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...