用户离线时的消息传递

Posted

技术标签:

【中文标题】用户离线时的消息传递【英文标题】:Message delivery when user is offline 【发布时间】:2008-10-29 17:17:25 【问题描述】:

我有一个用于 OpenFire 的插件,它使用创建并向用户传递消息

XMPPServer.getInstance().getMessageRouter().route(message)

我想知道的是,如果用户不在线,该消息会发生什么情况。

我的目标是只有在用户在线时才发送消息,否则失败或被路由到比特桶。

【问题讨论】:

【参考方案1】:

这完全取决于 Openfire 配置。在 Openfire 管理控制台中,转到服务器 -> 服务器设置 -> 离线消息。有存储、反弹和丢弃的选项。

存储:在 用户重新上线。 丢弃:丢弃消息。 退回:丢弃并通过返回消息通知发件人。

【讨论】:

看起来不错。不要以为您不知道当发件人是插件时退回会做什么? 即使通过 API 发送,消息也需要来自某人。服务器将尝试回复该地址,如果该地址无效或当前未登录,则失败。【参考方案2】:

另一种方法,如果您只是希望这些消息不下线而不影响其他消息的传递,则使用 type='headline'。标题不是很明确,但RFC 3921bis Section 5.2.2 说:

headline -- 消息提供提醒、通知或其他不需要回复的信息(例如,新闻头条、体育更新、近乎实时的市场数据和联合内容)。由于不希望回复消息,因此接收客户端通常会在界面中显示“标题”类型的消息,以适当地区分该消息与独立消息、聊天消息或群聊消息(例如,通过不向接收者提供回复能力)。 接收服务器应该将消息传递给接收者的所有可用资源。

当今的大多数服务器只会默默地将标题投放给离线用户,并在用户在线时将其传递给优先级最高的资源。

【讨论】:

以上是关于用户离线时的消息传递的主要内容,如果未能解决你的问题,请参考以下文章

当用户在 quickblox 的 ios 中离线时获取消息

用户离线时Openfire发送推送通知

当手机离线时,GCM 会存储消息列表或仅存储最后一条消息,就像 APNS 一样?

在 Tigase 中向客户端发送自定义消息

FCM 上游消息传递的可靠性如何?

当用户在Android中使用XMPP离线时向用户发送通知