2010-11-16 4 views
0

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

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

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

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

ответ

3

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

+0

Это дает хорошее сравнение протокольных буферов против DBus http://lists.freedesktop.org/archives/dbus/2009-September/011786.html – CashCow

2

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

7

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

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

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

{ 
    "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} 
       ] 
} 

EDIT: ошибка синтаксиса :)

+1

Я нахожу, что JSon выигрывает против XML во всех точках. Это действительно легко читать/писать, поскольку нет никаких json-сущностей, о которых можно говорить, это также очень красноречиво (без избыточности тегов) благодаря его худшему синтаксису. –

0

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

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

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

  • JSON
  • YAML (alsmot все языки имеют по крайней мере один реализация парсер) формат
  • INFO обеспечивает повышение :: property_tree
+0

Я бы не сказал, что буферы протокола _clearly_ менее просты в использовании. Я думаю, что тот факт, что вы получаете специальные классы, обычно делает его намного проще в использовании. Кроме того, библиотека Buffer Protocol также поддерживает эквивалентный текстовый формат (который вы можете использовать для своей фактической связи, если хотите, или просто для целей отладки). –

+0

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

0

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