2010-01-03 4 views
1

Я использую C и хочу знать, являются ли XML-сообщения предпочтительнее текстовых сообщений, если речь идет о связи через соединение сокета?XML-сообщения через сокет TCP/IP

  1. Есть ли другой хороший вариант, скорее, для XML?
  2. Каков наилучший парсер (или параметр синтаксического анализа), доступный для синтаксического анализа XML в C?
  3. Есть ли стандартная библиотека, которая поставляется с C и помогает анализировать XML-сообщения?

ответ

5
  1. Вы проектируете протокол, так что вы решили. Вы можете использовать текстовую или двоичную связь. Какой бы формат вы ни использовали, вы решаете, как сериализовать/де-сериализовать и интерпретировать данные. Если вы используете XML, вы можете использовать XMLRPC или SOAP. Вы также можете использовать JSONRPC. В прошлый раз в моем проекте я использовал двоичный файл очень простым, но эффективным способом: первый, чтобы определить метод/функцию для вызова. Следующие 2 байта сообщают длину данных (до 64 КБ - 1 байт), а остальные - данные. Обратите внимание на Big/Small Endianess.

  2. Это очень субъективно. Вы можете использовать проверочные или недействительные парсеры. TinyXML - легкий. Вы можете посмотреть в MiniXML и Expat. libxml2 более толстый.

  3. Пока XML-синтаксис не находится в стандартных библиотеках C или C++. Вы можете использовать вышеупомянутые библиотеки.

Удачи вам!

EDIT:

Кстати, если вы хотите использовать двоичный формат для обмена данными, просто использовать любой из них 3:

  1. http://tpl.sourceforge.net/ - C библиотеку сериализации.

  2. http://www.s11n.net/c11n/ - Мощная и сложная библиотека сериализации C.

  3. Siseria - http://sourceforge.net/projects/siseria/, чисто на C. Я написал для проекта встроенной системы. Он работает без какой-либо зависимости и очень быстро! По сравнению с другими 2, мой очень простой и не использует кучу и динамическую память вообще. Все в стеке!

2

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

Возможно, вы захотите посмотреть JSON, это очень популярный формат и намного проще, чем XML. Доступно множество реализаций.

+0

+1 для рекомендации JSON – 2010-01-06 13:09:15

1

Я могу очень рекомендовать Protobuf, формат обмена данными Google. Мы используем его для связи между двумя процессами, при этом он отлично работает. Он имеет встроенную поддержку для C++, Python и Java и 3-х партийных библиотек для группы других (Jon Skeet поддерживает порт C#).

+0

+1 для Protobuf. Теперь он все больше используется, и я знаю, что это вилка для замораживания MySQL – 2010-01-06 13:10:02

0

Главный вопрос: каковы ваши требования к производительности.

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

Если вы проектируете интерфейс «машина-машина», вам лучше рассмотреть двоичные данные. Не забудьте в этом случае преобразовать все в стандартный порядок байтов.

+0

Да, я собираюсь отправить одно сообщение в секунду –

Смежные вопросы