直接在移动设备上关闭互联网会导致聊天应用程序出现问题。消息不存储在openfire离线表中,因为Openfire仍然显示我在线突然断开与服务器的连接。当重新登录尝试时,在该时间段内发送的消息将丢失。
我正在开发一个聊天应用程序,登录到openfire后我可以聊天,其他用户可以在网上看到我,但问题是如果一个用户丢失连接就像WIFI关闭,在这种情况下Openfire没有显示我的状态离线时它仍然显示在线,导致消息包丢失。
请提供我无法解决的解决方案。
在旁注中whatsapp和其他应用程序如何发送消息。他们是否在服务器和确认上使用消息存储策略,或者我在这里遗漏了一些东西。
答案 0 :(得分:1)
客户端和服务器都需要确认已发送消息&交付,例如你发送消息给别人,你可以做的是你在服务器上保存此消息,从服务器这条消息将发送到接收方并等待接收方确认消息已发送,一旦得到确认 - 从服务器删除该消息。
How whatsapp do it?我发现了Michael Donohue对Quora的回答
Whatsapp适用于商店和转发,WhatsApp客户端将存储您发送的任何消息,并继续尝试将其发送到WhatsApp服务器。当WhatsApp移动应用程序连接到聊天服务器时,存储转发过程会在两个方向上进行。客户端将其mesage存储中的所有待处理消息发送到服务器,而服务器将发往该客户端的所有累积消息发送到客户端。此过程在确认基础上完成。这意味着重复发送消息,直到另一方确认收到消息。服务器在确认后会丢弃消息 - 没有长期存储。虽然客户端会在ack到达时更新UI以仔细检查状态,但会保留消息。
答案 1 :(得分:-1)
在使用Smack框架的android客户端中,必须在创建XMPPTCPConnection之后和运行connection.login()之前禁用Stream Mananement。
connection.setUseStreamManagement(false);
我遇到了这个问题并且这个代码已经解决了。