android – 即使会话中没有SESSION,为什么openfire的用户仍保持在线状态
作者:互联网
我正在开发一个Android应用程序包含“消息”使用OpenFire作为XMPP服务器和使用Smack的Android客户端.
所有功能都可以正常工作,但是当用户在线时(因为你可以在openfire的管理面板中看到它的状态),并且网络连接突然断开,它的会话将被破坏,但用户仍然在服务器上保持在线状态!因此,数据包不作为离线消息存储在服务器中,即使用户离线也会发送给用户,数据包将丢失!
我被测试了一个Windows客户端(Spark),但当它的连接丢失时,服务器中的会话将被销毁,用户立即转向OFFLINE!
我该怎么做才能解决这个问题?
解决方法:
此行为可能由名为Stream Management的XMPP功能引入.
简而言之,此功能允许客户端短暂断开连接以从中断处继续,而不会执行与正常连接相关的所有操作(这往往涉及大量资源).
这对于具有不稳定网络连接的客户端或将应用程序置于后台时终止连接的设备非常有用,例如在移动电话上.
Openfire实现了这一功能.请注意,正如您所描述的那样,数据包不会“丢失”.相反,所有未处理的数据包都将被缓冲,并且,当客户端“迟到”重新连接时(超时适用,我认为默认值为3分钟),这些数据包将被视为发送到断开连接设备.
如果需要,可以通过将“stream.management.active”属性设置为“false”来禁用此功能(但对于典型设置,您不需要此功能,因为流管理功能有很好的用途).
标签:android,xmpp,server,openfire,smack 来源: https://codeday.me/bug/20190607/1195164.html