让ejabberd在客户端状态更改时通知外部模块

2024-09-28 21:18:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个ejabberd服务器jabber.domain.com网站,其中包含一个用python编写的xmpp组件(使用sleekxmpp)在presence.domain.com网站. 在

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

客户本身没有任何联系人。在

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

我希望客户不会知道presence.domain.com网站,它们只会连接到jabber.domain.com网站组件应该以某种方式得到服务器关于客户端存在的通知。在

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

谢谢


Tags: 服务器com客户机客户admin网站domain状态
2条回答

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

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

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

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

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

也可以让用户直接向组件发送状态信息。在

不需要编写自定义钩子或创建代理用户。在

相关问题 更多 >