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