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

Message lost when recipient disconnect suddenly in Ejabberd

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

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

我正在使用 Ejabberd 16.08。请建议我如何解决这个问题。

假设是标准的 c2s 连接,我建议使用 Stream Management,ejabberd 支持它,但也需要客户端支持。这不会阻止 "lost" 消息,但当用户 B 没有完全断开连接时,它会允许更快地检测和通知。

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

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