代码之家  ›  专栏  ›  技术社区  ›  Mahdi Moqadasi

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

  •  5
  • Mahdi Moqadasi  · 技术社区  · 8 年前

    我正在开发一个android应用程序,其中包含使用OpenFire作为XMPP服务器的“消息传递”和用于android客户端的Smack。 所有功能都可以正常工作,但当用户联机时(您可以在openfire的管理面板中看到它的状态),网络连接突然断开,它的会话将被破坏,但用户在服务器中保持联机!因此,数据包不会作为脱机消息存储在服务器中,即使用户处于脱机状态,数据包也会被发送给用户,并且数据包会丢失! 我测试了一个windows客户端(Spark),但当其连接丢失时,服务器中的会话将被破坏,用户将立即转入脱机状态! 我能做些什么来解决这个问题? User1 is online but has no session

    2 回复  |  直到 8 年前
        1
  •  4
  •   Guus khmarbaise    8 年前

    这种行为可能是由XMPP特性引入的,该特性名为 Stream Management .

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

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

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

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

        2
  •  1
  •   Kenan Begić    8 年前

    这是一个带有keepalive机制的bug。请检查此项:

    https://issues.igniterealtime.org/browse/OF-963

    我对4.2.3版也有同样的问题。切换回4.0.2。已报告版本4.0.3的问题。