由于通过openfire连接丢失而丢失消息

use*_*410 7 android openfire

在移动设备上关闭互联网直接导致我的聊天应用程序出现问题.消息不存储在openfire离线表中,因为Openfire仍然显示我在线突然断开与服务器的连接.当重新登录尝试时,在该时间段内发送的消息将丢失.

我正在开发一个聊天应用程序,登录到openfire后我可以聊天,其他用户可以在网上看到我,但问题是如果一个用户丢失连接就像WIFI关闭,在这种情况下Openfire没有显示我的状态为离线和它仍然显示在线,导致消息包丢失.

请提供我无法解决的解决方案.

在旁注中whatsapp和其他应用程序如何发送消息.他们在服务器和确认上使用消息存储策略还是我在这里遗漏了一些东西.

Yau*_*dav 1

客户端和服务器都需要确认消息已发送和传递,例如您向其他人发送消息,您在这里可以做的是将此消息保存在您的服务器上,从服务器此消息将发送给接收者并等待接收者确认消息已送达,一旦收到确认 - 从服务器删除该消息。

Whatsapp怎么做到的?我在 Quora 上找到了 Michael Donohue 的回答

Whatsapp 可以存储和转发,WhatsApp 客户端将存储您发送的任何消息,并不断尝试将其发送到 WhatsApp 服务器。当 WhatsApp 移动应用程序连接到聊天服务器时,存储和转发过程会在两个方向上发生。客户端将其消息存储中的所有待处理消息发送到服务器,而服务器将所有发往该客户端的累积消息发送到该客户端。这个过程是在确认的基础上完成的。这意味着消息会重复发送,直到另一方确认收到消息为止。一旦消息被确认,服务器就会丢弃消息 - 没有长期存储。而客户端将在 ack 到达后更新 UI 以仔细检查状态,但会保留消息。