通过丢失的连接XMPP丢失消息



我经历了这个问题

在设备断开的XMPP上丢失消息

但是没有答案。

当由于某些网络问题而丢失连接时,服务器将无法识别它,并继续向已断开的接收器发送消息。

我有一个解决方法,我可以从服务器中per端端口,而端子断开连接时,服务器能够在10秒后识别它,并在队列中保存更多消息,以防止它们丢失。

我的问题是,通过使用我知道PSI和许多其他XMPP客户端正在这样做的其他方式,可以通过100%失败保存消息传递。

在iOS方面,我正在使用xmppframework

一种方法是在服务器上使用高级消息处理(AMP);另一个是在您的客户上使用消息传递收据。

前者需要一个启用AMP的服务器实现启动客户端必须能够告诉服务器它想要什么样的交货状态报告(如果要在交货是不可能的)。请注意,无论如何,这都不是防弹的,因为目标客户端失去了与服务器的连接到服务器机器上的TCP堆栈的那一刻之间有一个窗口,并且在此窗口中告诉服务器并告诉服务器。服务器已将发送给客户端发送的发送可以发送的,因为TCP层中没有消息边界的概念,因此服务器进程是否设法将消息stanza的XML塞入其TCP连接的系统缓冲区中,它考虑stanza stanza发送—一旦TCP堆栈说连接丢失了,它就无法知道其流的哪个部分没有到达接收器。

后一个防弹的,因为客户依靠有关消息接收的明确通知。不过,这确实会增加融合度。作为回报,不需要对此功能的服务器支持—它仅在客户端中实现。

与xep-0198一起享受...

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

对于我正在使用的XMPP客户端,使用以下机制:

  • 为项目增加可及性,以快速检测电话有连接问题时。
  • 使用XEP-0198的修改版本,添加了服务器发送的确认。因此,客户端发送消息,服务器通过收据确认。后来,接收用户还将通过收据确认。对于您发送的每条消息,您将获得两个确认,一个从服务器中获得,一个从客户端获得。当然,这需要在服务器上进行修改。
  • 当该应用未连接到XMPP服务器时,消息将排队。
  • 当该应用再次登录到XMPP服务器时,该应用程序获取所有未经服务器确认并再次发送的消息。

为此,您必须将消息本地存储在应用程序中的三个可能的状态:"未发送","由服务器确认","用户确认"

最新更新