在移动设备上关闭互联网会直接导致我的聊天应用程序出现问题。消息未存储在 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/