我有一个 XMPP 应用程序,其中两个客户端进行交互 (1) 一个机器人编程Smack http://www.igniterealtime.org/projects/smack/(Scala/Java) 和 (2) 一个 GUI 聊天客户端strophe http://code.stanziq.com/strophe/(Javascript)。
应用程序需要交换自定义XML(例如,如下所示)
<myPacket>
<response type='sensorData'>
<temperature units='Kelvin'>
234
</temperature>
</response>
</myPacket>
交换数据的最佳方式是什么?以下是我能想到的:
1) 编写自定义 XMPP 节
2) 将我的 XML 嵌入当前定义的节中(例如,在消息或 iq 中)
3)对于smack,use the Message.get(set)Property读取/写入自定义数据 http://www.igniterealtime.org/builds/smack/docs/latest/documentation/properties.html.
No. 3) 被排除,因为它要求两个客户端都理解 Java 对象并使用相同的库 (Smack)。
请指出解决同一问题的任何其他问题。
[编辑:] 经过一些研究,我发现 Dataforms (XEP-0004) 是最简单的方法,只要你的库支持它。
这很大程度上取决于数据的使用方式。我的经验法则是,如果我只传递键值对(简单数据),那么我会选择 Smack 中的属性功能。但属性功能只能在Message中使用。由于某种原因,属性扩展不使用 Smack 的提供者架构,而是硬编码到Packet
and PacketParserUtils
班级。因此,如果您无法在 IQ 或 Presence 数据包中重用它。
如果您打算使用键值对以外的任何内容,那么您应该为您的自定义节编写一个提供程序。这需要一些工作,但是一旦您实现了编组/解编组,那么您的自定义节几乎可以在 Smack 框架中的任何地方工作。见咂嘴提供者架构 http://www.igniterealtime.org/builds/smack/docs/latest/documentation/providers.html了解详情。
我在我的一篇博客中写了关于编写提供商的博客post http://oneminutedistraction.wordpress.com/2010/08/31/receiving-pep-broadcast-2/。这不是这篇文章的主要内容,但希望你发现它也有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)