为什么在会话中不存在会话的情况下,openfire用户仍保持在线状态

Mah*_*asi 5 android xmpp openfire smack server

我正在开发使用OpenFire作为XMPP服务器并使用Smack for android客户端的包含“消息”的android应用。所有功能都可以正常工作,但是当用户在线时(如您在openfire的管理面板中看到的状态),并且网络连接突然断开,它的会话将被破坏,但用户仍在服务器中处于联机状态!因此,数据包不会作为脱机消息存储在服务器中,即使用户处于脱机状态,也会将其发送给用户,并且数据包将会丢失!我已经测试过Windows客户端(Spark),但是当它的连接断开时,服务器中的会话将被破坏,用户将立即变为OFFLINE!我该怎么做才能解决这个问题? 用户1在线 但没有会议

Guu*_*uus 4

此行为可能是由称为“流管理”的XMPP 功能引入的。

简而言之,此功能允许短暂断开连接的客户端从中断处继续,而无需执行与正常连接相关的所有操作(这往往涉及大量资源)。

这对于网络连接不稳定的客户端或将应用程序置于后台时终止连接的设备(例如在移动电话上)非常有用。

Openfire 实现了这个功能。请注意,正如您所描述的,数据包不会“丢失”。相反,所有未处理的数据包都将被缓冲,并且当客户端“太晚”重新连接时(适用超时,我认为默认值为 3 分钟),这些数据包将被视为好像它们被发送到断开连接的客户端。设备。

如果需要,您可以通过将“stream.management.active”属性设置为“false”来禁用此功能(但对于典型设置,您不希望这样做,因为流管理功能有很好的用途)。