首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在多用户聊天中向脱机用户发送消息(ejabberd)

在多用户聊天中向脱机用户发送消息(ejabberd)
EN

Stack Overflow用户
提问于 2014-03-12 21:21:14
回答 3查看 9.1K关注 0票数 8

实际上,我们正在将ejabberd服务器用于我们客户端的一个聊天应用程序。除了群聊之外,一切都运行得很好。

我们正在使用MUC进行群聊,但无论何时使用离线,它都不会向成员发送消息。有没有其他的插件或者我们可以让它工作的东西?

或者任何人都可以建议如何从群聊历史记录中接收该用户的离线消息。

提前感谢

EN

Stack Overflow用户

回答已采纳

发布于 2014-03-12 23:07:01

这是因为多用户聊天室没有这样的概念。事实上,如果你再仔细考虑一下,你就会明白为什么:

  • 潜在的未绑定数量的参与者可能会在任何给定时间出现在房间中。

那么,究竟哪些用户当前不在MUC房间中,服务器应该将消息存储在脱机存储中?我的意思是,在一般情况下,服务器并不知道在它托管的给定房间中可能聊天的所有用户。

(好吧,如果这是唯一的问题,我必须承认,它可能适用于仅限成员的房间。)

  • MUC房间不是“仅限本地服务器”:来自任何数量的其他服务器的潜在未绑定数量的用户可能会加入房间,并且将通过各自的服务器将消息传递给这些用户。

显然,这也是为什么"MUC房间离线存储“这种想法没有意义的另一个原因。根据定义,

  • MUC房间是暂时的:当用户离线时,他们不在任何房间-(重新)连接一个房间是一种明确的行为。

这实际上是不支持离线存储的最重要原因。

如你所见,XMPP MUC房间很像IRC的类固醇聊天。

因此,您真正想要的是"room history"-a,它是XMPP-0045扩展的一部分,它允许客户端显式地向房间请求他们错过的消息历史记录。在某种意义上,代替为每个用户存储离线消息,聊天室可以被配置为仅存储发送给它的特定数量的最新消息(或在给定时间段内的所有此类消息)。则房间支持按加入用户查询这些消息。

您可以探索另一种可能性:XEP-0033"multicast addressing" (“扩展节寻址”)。基本上,它允许客户端使用特殊的多播服务一次将其消息发送给多个接收者。好处是离线存储又出现了。缺点是,我怀疑ejabberd是否支持这种开箱即用的组播服务,而且似乎该扩展留下了许多细节,关于如何实现它没有具体说明。

票数 13
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22352864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档