лучший способ обмена пользовательских элементов XML в XMPP? - PullRequest
2 голосов
/ 19 ноября 2010

У меня есть приложение XMPP, где два клиента взаимодействуют (1) бот, запрограммированный с Smack (Scala / Java) и (2) клиент чата с графическим интерфейсом, запрограммированный в strophe (Javascript).

Приложение должно обмениваться пользовательским XML (например, как показано ниже)

<myPacket>
   <response type='sensorData'>
      <temperature units='Kelvin'>
         234
      </temperature>
   </response>
</myPacket>

Каков наилучший способ обмена данными?Вот то, что я мог бы придумать:

1) Написать собственные разделы XMPP

2) Вставить мой XML-код в определенные на данный момент разделы (например, в сообщение или iq)

3) Для smack используйте Message.get(set)Property для чтения / записи пользовательских данных .

Нет.3) исключен, поскольку требует, чтобы оба клиента понимали объекты Java и использовали одну и ту же библиотеку (Smack).

Просьба указать мне на любые другие вопросы, касающиеся той же проблемы.

[ПРАВИТЬ:Проведя некоторые исследования, я обнаружил, что Dataforms (XEP-0004) - это самый простой способ сделать это, если ваша библиотека поддерживает это.

1 Ответ

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

Это во многом зависит от того, как будут использоваться данные.Мое эмпирическое правило заключается в том, что если я передаю только пары ключ-значение (простые данные), я бы выбрал свойство свойства в Smack.Но свойство можно использовать только в сообщении.По какой-то причине расширение свойства не использует архитектуру провайдера Smack, а жестко закодировано в классы Packet и PacketParserUtils.Поэтому, если вы не можете использовать его повторно в пакетах IQ или Presence.

Если вы собираетесь использовать что-то большее, чем пара ключ-значение, то вам следует написать провайдера для своего пользовательского раздела.Это немного трудоемко, но после того, как вы внедрили маршаллинг / демаршаллинг, ваш пользовательский раздел работает практически везде в фреймворке Smack.Подробнее см. Smacks архитектура провайдера .

Я написал блог о написании провайдера в одном из моих постов .Это не главное доверие поста, но надеюсь, что вы найдете его полезным.

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