我经历了这个问题
Lost messages over XMPP on device disconnected
但没有答案。
当由于某些网络问题导致连接丢失时,服务器无法识别它并继续向断开的接收器发送消息,这些消息将永久丢失。
我有一个解决方法,我从服务器ping客户端,当客户端断开连接时,服务器能够在10秒后识别它并在队列中保存更多消息,防止它们丢失。
我的问题是可以100%失败保存消息传递是通过使用其他方式实现我知道psi和许多其他xmpp客户端正在这样做。
在ios方面我正在使用xmppframework答案 0 :(得分:1)
一种方法是在服务器上使用Advanced Message Processing(AMP);另一个是在你的客户身上使用Message Delivery Receipts。
前一个需要启用AMP的服务器实现和启动客户端必须能够告诉服务器它想要哪种类型的传递状态报告(它需要an error to be returned if the delivery is not possible)。请注意,这不是防弹,因为在目标客户端失去与服务器的连接之间以及服务器计算机上的TCP堆栈检测到这一点并告诉服务器有关它的那一刻之间有一个窗口:在此窗口期间,所有内容发送到客户端被服务器认为是好的,因为TCP层中没有消息边界的概念,因此如果服务器进程设法将消息节的XML填充到其TCP连接的系统缓冲区中,则认为该节要发送 - 一旦TCP堆栈说连接丢失,它就无法知道其流的哪些位没有到达接收器。
后者 防弹,因为客户端依赖于有关消息接收的显式通知。这确实增加了骚扰。作为回报,不需要服务器支持此功能 - 它仅在客户端中实现。
答案 1 :(得分:0)
选择XEP-0198并享受......
答案 2 :(得分:0)
对于我正在使用的XMPP客户端,使用以下机制:
为此,您必须在应用程序中本地存储三种可能状态的消息:“未发送”,“由服务器确认”,“由用户确认”