1

我们开发了一个应用程序,该应用程序应该只允许使用该应用程序的对等方之间进行交互。我们想区分通过我们的应用程序登录的用户和在常见的聊天客户端(例如 Pidgin)上登录的用户。

有一个观察:如果我们通过我们的应用程序和 Pidgin 登录相同的用户名,应用程序会不时丢失节,因为它们只传递给 Pidgin,反之亦然。

我已经开始考虑通过检查应用程序特定的后缀,例如 MyName@OurServer/OurApp(OurApp 就是那个后缀)来为我们的应用程序的用户跟踪一些特定的 jid。但是如果在我们的应用程序和 Pidgin 上都登录了相同的用户名,我们如何让服务器只向我们的客户端发送节?

4

3 回答 3

2

资源标识符(您称之为“后缀”)不是检测应用程序的可靠方法。服务器能够将其更改为任何感觉。此外,尽管在实践中不太可能,但用户可能会在其客户端中输入此资源字符串,从而造成麻烦。

识别客户端类型的正确方法是通过它的存在。标准方法是使用XEP-0115: Entity CapabilitiesXEP-0030: Service Discovery。您的客户端将在其服务发现结果中包含特定的识别功能。

一旦确定了客户的完整 JID,请始终使用它与它进行通信。将<iq>节用于请求/响应,或<message>使用带有自定义有效负载的节(否<body>)。

于 2012-05-03T22:27:02.893 回答
1

确保您发送到完整的 JID,而不仅仅是基本 JID。

Full JID: MyName@OurServer/OurApp
Base JID: MyName@OurServer

第二个版本可能有几个不同的结果,具体取决于服务器及其配置。使用完整的 JID 将只发送到该客户端连接。

于 2012-05-03T18:24:17.457 回答
1

“后缀”在 XMPP 中称为资源。您可以将 XMPP 数据包发送到裸 JID (user@domian.com) 或完整 JID (user@domain.com/resource)。您可以轻松地使用该资源来识别您的客户端,还可以使用服务发现检查客户端软件,请参见示例 8

于 2012-05-03T21:05:22.883 回答