2013-03-01 8 views
0

Helo, я работаю над мобильной игрой, которая требует связи в реальном времени от клиента к серверу.бинарный сервер xmpp?

Обычно я реализую сервер сокетов TCP и использую какой-то частный двоичный протокол, чтобы включить двунаправленную связь, и теперь я также рассматриваю сервер XMPP, такой как Ejabberd, который основан на стандарте. Но XML в некотором роде это действительно избыточно и неэффективно, особенно для мобильного приложения, это может означать увеличение трафика и потребления памяти.

  1. Должен ли XMPP использовать XML?
  2. Существует ли реализация XMPP, использующая двоичный формат данных как низкоуровневый формат данных вместо использования XML? (или я не должен выбирать XMPP и начинать с других стандартов или технологий.)
  3. Любая стратегия сокращения накладных расходов на отправку сложного объекта данных (не большого файлового объекта) с использованием XMPP?
+2

Не уверен, что вы просите ... все, что XMPP собирается использовать XML - иначе это не XMPP. Редактирование: видимо, есть (joke) двоичный протокол XMPP: http://xmpp.org/extensions/xep-0239.html – Turch

+0

Извините за непонятно, и я обновил вопрос. Разработчики протокола, похоже, не считают, что проблема заключается в использовании XML. на мой взгляд, даже JSON может сэкономить значительный избыточный трафик, чем XML. На основе некоторых поисковых API Google Talk также принимает двоичный формат, если я не ошибаюсь. –

+0

Конечно, использование двоичного протокола имеет свои преимущества. Но у него также есть некоторые серьезные недостатки, которые решаются XMPP. В большинстве случаев использование накладных расходов на основе XML-протокола не учитывается. Не пытайтесь оптимизировать вещи, когда они вам действительно не нужны. Реализация полнофункционального протокола чата, такого как XMPP в двоичном формате, не является тривиальной задачей. Вот почему в мире с открытым исходным кодом такого не существует. И с сжатием потока, «шапками» и дальнейшей оптимизацией и XEP, XMPP может быть очень эффективным даже в средах ограничения ресурсов. – Flow

ответ

2

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

Что касается Google talk api: они используют протокол non-xml для клиентов - подключения к серверу Google. Когда я посылаю сообщение в клиенте Gmail, тело запроса содержит только кучу пост данных:

count=1&ofs=16&req0_type=m&req0_to=my.friend%40gmail.com&req0_id=6A8466CBC59CBB0C_0&req0_text=test&req0_chatstate=active&req0_iconset=classic&req0__sc=c 

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

+0

Благодарим вас за предоставленную информацию. Я думаю, что это хорошая стратегия для сокращения накладных расходов при отправке сложной структуры данных, не касаясь протокола. Это хорошо для игрового сценария MMO, и я попробую это. –

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