gpt4 book ai didi

xmpp - 如何通过向 ejabberd 服务器发送一条 消息来加入多个房间

转载 作者:行者123 更新时间:2023-12-02 21:14:16 40 4
gpt4 key购买 nike

例如,我有 20 个房间要加入。简单的解决方案是向每个房间 ID 发送 20 条消息。考虑到性能,这很糟糕。

我想加入 20 个房间,只需发送一个 <presence>消息,如何实现?编写一个模块来 Hook 自定义<presence>信息?但我不知道如何编写这种模块。

最佳答案

XEP-0045 Multi User Chat ,没有定义使用单个状态数据包加入 20 个聊天室的方法。

但是,通过将其他 XMPP 扩展与多用户聊天相结合,您绝对可以在纯 XMPP 中实现此目的,而无需编写自定义 ejabberd 扩展。

您可以信赖XEP-0033 Extended Stanza Addressing ,您可以将 XMPP 数据包发送给多个收件人。它也适用于存在,如 example 所示。 .

ejabberd配置

ejabberd 15.04 起默认支持 XEP-0033 扩展节寻址。确保您已通过在 ejabberd 配置模块部分添加 mod_multicast 来启用该功能:

modules:
...
mod_multicast: {}

启用该服务后,您应该在支持该功能的服务器上有一个新服务(默认名称为multicast.example.net)http://jabber.org/protocol/地址:

<iq type='get'
to='multicast.example.net'
id='info1'>
<query xmlns='http://jabber.org/protocol/disco#info'/>
</iq>

响应是:

<iq from="multicast.example.net" type="result" to="<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0175647275416479606c716d642f6f6475" rel="noreferrer noopener nofollow">[email protected]</a>/laptop" id="info1">
<query xmlns="http://jabber.org/protocol/disco#info">
<identity category="service" type="multicast" name="Multicast"/>
<feature var="http://jabber.org/protocol/disco#info"/>
<feature var="http://jabber.org/protocol/disco#items"/>
<feature var="vcard-temp"/>
<feature var="http://jabber.org/protocol/address"/>
</query>
</iq>

用法

启用后,可以轻松发送针对多个 MUC 房间的状态数据包:

<presence to='multicast.example.net'>
<addresses xmlns='http://jabber.org/protocol/address'>
<address type='bcc' jid='<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9de9f8eee9eff2f2f0ddfef2f3fbf8eff8f3fef8b3f8e5fcf0edf1f8b3f3f8e9" rel="noreferrer noopener nofollow">[email protected]</a>/Usernick'/>
<address type='bcc' jid='testroom2@ conference.example.net/Usernick'/>
</addresses>
</presence>

因此,您将看到您同时加入了多个房间。

问题

XEP-0033 没有具体提到该用例,并且该模块尚未测试加入多个房间。在编写此示例时,我发现断开连接时,用户无法正确离开他加入的房间。这意味着您必须等待以下 Github 问题得到修复才能在生产中使用该功能:Broadcast presence change after multicast presence packet .

关于xmpp - 如何通过向 ejabberd 服务器发送一条 <presence> 消息来加入多个房间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31781137/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com