我有一个XMPP应用程序,其中两个客户端交互(1)用Smack(Scala / Java)编程的机器人和(2)用strophe(Javascript)编程的GUI聊天客户端。
应用需要交换自定义XML(例如,如下所示)
<myPacket>
<response type='sensorData'>
<temperature units='Kelvin'>
234
</temperature>
</response>
</myPacket>
交换数据的最佳方式是什么?以下是我能想到的:
1)编写自定义XMPP节
2)将我的XML嵌入到当前定义的节中(例如,在message或iq中)
3)对于smack,use the Message.get(set)Property
to read/write custom data。
没有。 3)被排除,因为它要求两个客户端都理解Java对象并使用相同的库(Smack)。
请指出解决同一问题的任何其他问题。
[编辑:]经过一些研究,我发现Dataforms(XEP-0004)是最简单的方法,只要你的图书馆支持它。
答案 0 :(得分:3)
这在很大程度上取决于数据的使用方式。我的经验法则是,如果我只传递键值对(简单数据),那么我会选择Smack中的属性功能。但属性功能只能在Message中使用。出于某种原因,属性扩展不使用Smack的提供程序体系结构,而是将其硬编码到Packet
和PacketParserUtils
类中。因此,如果您无法在IQ或Presence数据包中重复使用它。
如果您打算使用更多的键值对,那么您应该为自定义节编写提供程序。这有点工作但是一旦你实现了编组/解组,那么你的自定义节几乎可以在Smack框架中的任何地方运行。有关详细信息,请参阅Smacks provider architecture。
我在我的post之一做了关于写提供者的博客。这不是帖子的主要信任,但希望你也觉得它很有帮助。