收件人在 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 中突然断开连接时消息丢失的主要内容,如果未能解决你的问题,请参考以下文章