数据包中 getChildElement 中的 Openfire XMPP 组件名称空间

Openfire XMPP component namespace in getChildElement in packet

作为 XMPP 和 Java(我是 iOS 开发人员)的新手,通过遵循一些教程,我设法编写了一个服务器组件 (Openfire) 和客户端 iOS 应用程序(使用 robbiehanson 的ios xmppframeowrk)。我可以向组件 <-> iOS 客户端发送消息和从中接收消息。这是一个抽象代码:

从 iOS 客户端应用程序向服务器组件发送状态:

XMPPPresence *presence = [XMPPPresence presence];
[presence addAttributeWithName:@"to" stringValue:serverComponentJid];
NSXMLElement *someInfo = [NSXMLElement elementWithName:@"someInfo"
                                               stringValue:@"xyz"];
[presence addChild:someInfo];
[_xmppStream sendElement:presence];

在服务器组件中接收数据包:

if (packet instanceof Presence){
        org.xmpp.packet.Presence recvPresence = (Presence) packet;

Element theInfo = recvPresence.getChildElement("someInfo", "***what_shoud_be_the_namespace_here***");
System.out.println("Some info in the presence as " + theInfo.attributeValue("someInfo"));

我可以打印数据包并查看 someInfo。当我在命名空间中传递“”时,我能够正确地理解它。但是我仍然不明白在 xmpp 中使用什么以及如何使用命名空间。任何指南,啧啧,link,请参考或回答

命名空间用于定义节(数据包)的"usage/scope"。 它们用于定义功能和绑定操作(解析器、监听器等),因此任何 API 都能够添加基于标签名称和命名空间的行为(默认或自定义)。

所以命名空间被用作协议的保留键。

使用自定义命名空间,可以定义自定义 IQ(或其他任何东西)并自定义 logic/parser 等,以便在您需要时触发 exaclty,并根据需要获取 n 个自定义操作。

官方文档:

https://datatracker.ietf.org/doc/rfc6120/?include_text=1

还有更多:

http://xmpp.org/extensions/index.html