丢失消息在失去连接XMPP(Losing messages over lost connection

2019-10-19 07:31发布

我通过这个问题去

在设备上基于XMPP协议消息丢失断开

但目前还没有答案。

当连接由于一些网络问题丢失,则服务器不能识别它,并不断将消息发送给接收器断开被永久丢失。

我在这是我从服务器ping客户端,当客户端断开连接服务器能够10秒后,识别它,并在队列中保存更多消息防止他们丢失解决方法。

我的问题是可以100%的失败节省消息传递通过一些其他的方式,我知道PSI和许多其他XMPP客户正在做它来实现。

在iOS端我使用xmppframework

Answer 1:

一种方法是聘请高级消息处理 (AMP)您的服务器上; 另一种是采用的邮件送达回执上你的客户。

前者需要启用AMP-服务器实现发起方客户端必须能够告诉报告什么样的交货状态就是了(它想要的服务器,如果交货是不可能返回错误 )。 需要注意的是,因为是当下的目标客户losts它与服务器和服务器的机器上的TCP堆栈检测到这一点,并告诉服务器关于它的时刻连接的窗口,这不是防弹反正:此窗口中,一切发送到客户端是由服务器考虑,因为有一个在TCP层没有消息边界的概念,因此,如果服务器进程管理饱食一顿消息节的XML到它的TCP连接的系统缓冲区,它认为节发送好吗要发送,也没有办法为它知道它的流比特一旦TCP堆栈说,连接丢失没能接收器。

后者防弹的客户依靠有关消息接收的明确通知。 这确实增加繁琐虽然。 作为回报,此功能目前没有服务器的支持是必需的,它的实施仅在客户端。



Answer 2:

去XEP-0198,享受...

http://xmpp.org/extensions/xep-0198.html



Answer 3:

对于XMPP客户端我的工作,下面的机制:

  • 添加到达性项目,检测迅速,当手机连接问题。
  • 使用修改后的版本XEP-0198 ,将服务器发送的确认。 因此,客户端发送邮件时,服务器与收据确认。 后来,接收用户也将与收据确认。 每次发送消息时,你会得到二次确认,一个从服务器,从一个客户端。 这当然需要在服务器上的修改。
  • 当应用程序没有被连接到XMPP服务器,消息排队。
  • 当应用程序被再次登录到XMPP服务器,应用程序需要它不是由服务器,以确认所有消息,并再次发送。

对于这个工作,你必须将信息存储在本地的应用程序有三种可能的状态:“不发送”,“通过服务器确认”,“用户确认”



文章来源: Losing messages over lost connection xmpp