持久的XMPP MUC(XEP-45),与WhatsApp组聊天一样

p0l*_*ris 12 xmpp muc groupchat

从规格 -

7.14退出房间

为了退出多用户聊天室,占用者将"不可用"类型的存在节发送到它当前在房间中使用的<room @ service/nick>.

例80.乘员离开房间

<presence
    from='hag66@shakespeare.lit/pda'
    to='coven@chat.shakespeare.lit/thirdwitch'
    type='unavailable'/>
Run Code Online (Sandbox Code Playgroud)

这意味着一旦用户断开与XMPP服务器的连接,他就会从服务器端的组中删除.问题很简单 - 我不希望这种行为; 我想要一个类似于Whatsapp所做的行为,即使用户离线,他仍然是MUC房间的一部分(配置为在服务器端持久)并且将接收来自其他占用者的消息.

鉴于iOS的XEP-0045和XMPPFramework的规范和文档,我不知道如何实现这一点,或者是否可以在传统的ejabberd服务器中实现这一点.

Flo*_*low 9

XEP-45的设计早在10年前.那时候,设计师们想到了类似IRC频道的东西.XEP-45的所有内容都是基于用户在他/她启动/终止其客户端时进入和离开房间的假设而设计的.

WhatsApp Groupchats是不同的:用户加入群聊是能够查看该聊天的(完整)历史记录.即使用户客户端离线/不可用,他仍然被认为是群聊的一部分.

XMPP社区目前正在使用提供此类功能的新XEP.它被称为XEP-0369:Mediated Information eXchange.它是XEP-0045的精神继承者,提供了现代群聊所期望的功能.


Kev*_*Kev 5

你可以通过使用MUC的服务器端历史(消息档案管理,XEP-0313)来模拟这样的事情,这样当客户登录时他们能够在他们不在的时候请求MUC的历史记录.它.

如果您还希望能够显示房间的离线伪占用者,最简单的方法是将每个房间的pubsub节点映射到存储客户可以读取的这些伪占用者列表以补充通常入住名单.

这里可能还有其他解决方案,但我想到的那些解决方案涉及以非标准方式更改服务器的行为,例如允许普通占用者查询成员列表,通常只有管理员才能这样做.


vit*_*ter 5

Whatsapp模型比您想象的要简单得多 - 即使用户断开连接,它们也只是在线维护用户会话,并在"重新连接"会话时重新发送消息.XEP-0198引入了与传统XMPP会话类似的概念.您只需要配置更长的不活动时间(通常XEP-0198假定为300秒,但类似Whatsapp的信使会话超过24小时)