收件人在 Ejabberd 中突然断开连接时消息丢失

Posted

技术标签:

【中文标题】收件人在 Ejabberd 中突然断开连接时消息丢失【英文标题】:Message lost when recipient disconnect suddenly in Ejabberd 【发布时间】:2017-06-30 10:08:34 【问题描述】:

由于某些网络问题,收件人突然从 INTERNET 断开连接时消息丢失。在这种情况下,我想停止消息丢失。

示例:用户 A 和 B 在线聊天。 A 向 B 发送消息。然后突然用户 B 失去了 INTERNET 连接,同时用户 A 仍在向 B 发送消息。服务器假设 B 仍然在线,因为不知道 B 有网络问题。

我正在使用 Ejabberd 16.08 。请提出如何解决此问题的方法。

【问题讨论】:

【参考方案1】:

假设是标准的c2s连接,我建议使用Stream Management,ejabberd支持,但也需要客户端支持。这不会防止“丢失”消息,但可以在用户 B 未完全断开连接时更快地检测和通知。

另一种选择是使用XMPP over BOSH,它有许多可用的客户端库,具体取决于您的具体平台。 BOSH 的行为与流管理非常相似,并且适用相同的注意事项。

由于互联网通信的性质,总会有这样的情况,服务器认为消息已发送,但客户端尚未收到。在这种情况下,它可以帮助使用Message Archive Management 来同步用户 B 的客户端,当它重新连接时。

【讨论】:

以上是关于收件人在 Ejabberd 中突然断开连接时消息丢失的主要内容,如果未能解决你的问题,请参考以下文章

Ejabberd 虚拟主机公告昵称

Ejabberd:即使在线也能推送通知

Ejabberd 外部身份验证:extauth 脚本突然退出,原因为“正常”

swoole tcp突然断开连接

从聊天中获取待处理消息

使用“Google Play 游戏服务”玩游戏时突然断开连接