android - 为什么即使 session 中不存在 SESSION,openfire 的用户仍保持在线状态

标签 android server xmpp openfire smack

我正在开发一个包含“消息”的 Android 应用程序,使用 OpenFire 作为 XMPP 服务器并使用 Smack 作为 Android 客户端。 所有功能都正常,但是当用户在线时(你可以在 openfire 的管理面板中看到它的状态),并且网络连接突然断开,它的 session 将被破坏,但用户在服务器上保持在线状态!因此,数据包不会作为离线消息存储在服务器中,即使用户离线也会发送给用户,数据包将会丢失! 我测试了一个 Windows 客户端(Spark),但是当它失去连接时,服务器中的 session 将被破坏并且用户立即变为离线! 我该怎么做才能解决这个问题? User1 is online but has no session

最佳答案

此行为可能是由名为 Stream Management 的 XMPP 功能引入的.

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

这对于网络连接不稳定的客户端或在将应用程序置于后台时中断连接的设备(如手机)很有用。

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

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

关于android - 为什么即使 session 中不存在 SESSION,openfire 的用户仍保持在线状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48866757/

相关文章:

sockets - 套接字服务器和逻辑服务器分离

python - 如何通过重新启动应用程序来克服ModbusTcpServer中的 "Address already in use"?

android - JXMPP & smack Android 库,获取消息传递状态

xmpp - Google 聊天服务器存档 (XEP-0136)

android - 如何在 Android 应用程序中使用来自 GitHub 的库

android - GDAA(谷歌云端硬盘 Android API): download file from AppDataFolder by using fileId

java - 如何在回收站 View android中选择多个项目?

java - +1 按钮的应用 URL

node.js - 在单个端口后面运行多个 sails 应用程序

python - xmpp:2 个客户使用同一帐户