让ejabberd通知外部模块客户端存在更改

时间:2012-07-09 09:26:37

标签: python xmpp ejabberd

我在jabber.domain.com上有一个ejabberd服务器,在presence.domain.com上用python(使用sleekxmpp)编写了一个xmpp组件。

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

客户本身没有任何联系。

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

我希望客户端不会知道presence.domain.com上的组件,他们只是连接到jabber.domain.com,组件应该以某种方式得到服务器通知客户端存在。< / p>

有办法吗? 我的组件设置是否正确?或者我应该考虑使用xmpp插件/模块/等..

由于

2 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:0)

组件可以完全按照用户的方式订阅用户的状态。此外,用户可以订阅组件的存在。您只需遵循通常的模式,即组件/用户通过发送<presence/>类型subscribe来发送用户/组件可以接受的<presence/>类型subscribed

您还可以让用户直接向组件发送状态。

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