1

我在 jabber.domain.com 有一个 ejabberd 服务器,在 Presence.domain.com 有一个用 python 编写的 xmpp 组件(使用 slimxmpp)。

我希望每次客户将其状态从可用更改为不可用时组件都能收到通知,反之亦然。

客户本身没有任何联系方式。

目前,我已将我的客户设置为将他们可用的在线状态节发送到 admin@presence.domain.com,并且我确实收到了他们的在线/离线在线状态通知。但我觉得这不是正确的方法。

我希望客户端不会知道 Presence.domain.com 上的组件,他们只会连接到 jabber.domain.com,并且组件应该以某种方式从服务器收到有关客户端存在的通知。

有没有办法做到这一点?我的组件设置是否正确?或者我应该考虑使用 xmpp 插件/模块/等。

谢谢

4

2 回答 2

5

为此编写一个自定义的 ejabberd 模块并不难。它将需要在 ejabberd 中注册到存在更改挂钩,并在每个存在数据包上将通知路由到您的外部组件。

您的模块可以注册一对钩子“set_presence_hook”和“unset_presence_hook”,以便在用户开始/结束会话时得到通知。

如果您需要跟踪其他在线状态,还有一个挂钩“c2s_update_presence”会触发您的用户发送的任何在线数据包。

不使用自定义模块的其他可能性是使用共享名册。将 admin@presence.domain.com 添加到所有用户的共享名册中,但在这种情况下,他们会看到此项目反映在他们的名册上。

于 2012-08-13T00:08:00.360 回答
0

组件可以以与用户完全相同的方式订阅用户的出席信息。用户也可以订阅组件的存在。您只需要遵循通常的模式,即组件/用户发送一个<presence/>类型subscribe,用户/组件可以通过发送一个<presence/>类型来接受subscribed

您也可以让用户直接向组件发送出席信息。

无需编写自定义挂钩或创建代理用户。

于 2012-08-13T20:32:49.667 回答