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

标签 android openfire

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

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

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

旁注 whatsapp 和其他应用程序如何发送消息。他们是否在服务器和确认上使用消息存储策略,或者我在这里遗漏了什么。

最佳答案

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

How whatsapp do it?我在 Quora 上找到了 Michael Donohue 的这个答案

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

关于android - 由于通过 openfire 连接丢失而丢失消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24534747/

相关文章:

android - 已弃用 API 29 的 "getBitmap"。任何替代代码?

android - 如何在android中获得基于颜色的复杂区域?

android - Glide 占位符矢量可绘制资源未找到异常

android - Openfire:即使我已经连接到 Openfire 服务器,几(2-3)小时后也无法发送数据包

mysql - 离线表情符号/表情显示??? MySql中的Offline表

java - Openfire 插件 servlet

android - 需要一个Android xmpp 聊天客户端来配置openfire!

android - 知道联系人 ID 后如何发送短信/电子邮件?

android:如何在我的应用程序中实现像 Go Launcher 这样的第一次教程?

java - XMPP:BOSH 客户端 session 在连接到 openfire 时随机关闭