代码之家  ›  专栏  ›  技术社区  ›  Jus12

在XMPP中交换自定义XML元素的最佳方法?

  •  2
  • Jus12  · 技术社区  · 14 年前

    我有一个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) 因为斯马克, use the Message.get(set)Property to read/write custom data .

    排除了3),因为它要求两个客户机都理解Java对象并使用同一个库(Smack)。

    请指点我解决同一问题的任何其他问题。

    [编辑:]在做了一些研究之后,我发现只要您的库支持,Dataforms(XEP-0004)是最简单的方法。

    1 回复  |  直到 13 年前
        1
  •  3
  •   Chuk Lee    14 年前

    这在很大程度上取决于数据将如何使用。我的经验法则是,如果我只传递键值对(简单数据),那么我会选择Smack中的属性特性。但属性功能只能在消息中使用。出于某种原因,属性扩展不使用Smack的提供程序体系结构,而是将其硬编码为 Packet PacketParserUtils 上课。所以如果你不能在IQ或状态信息包中重用它。

    如果您要使用更多的键值对,那么您应该为您的自定义节编写一个提供者。这是一项工作,但一旦实现了编组/解组,那么您的自定义节就可以在Smack框架中的任何地方工作。看一看 provider architecture 详细情况。

    我在我的一个博客里写过 post . 这不是该职位的主要信任,但希望你也能找到帮助。