当用户的数据连接因 tigase 断开时,我如何解决不获取 XMPP 状态更新的问题

Posted

技术标签:

【中文标题】当用户的数据连接因 tigase 断开时,我如何解决不获取 XMPP 状态更新的问题【英文标题】:How do I get around not getting XMPP presence updates when users' data connection drop with tigase 【发布时间】:2014-07-30 16:08:44 【问题描述】:

我正在构建一个具有聊天功能的 android 应用程序,它使用一个 XMPP 服务器,它是 tigase。 我遇到了这个整洁的问题;当用户的数据连接断开时,在线状态仍显示为在线。我在 tigase 论坛上读到这是典型的行为。默认情况下,更新状态大约需要 10 分钟。

但是,我们都知道,像 Gtalk 这样的聊天应用程序曾经在这种情况下正确地显示存在。所以我的问题是:

    这在 XMPP 中是否正常?什么技巧/黑客/解决方法将帮助我克服这个问题? (我已经尝试编辑init.properties文件并重启超时10s,但仍然没有响应)

    tigase 是正确的答案吗?如果启动,我的用户群最多将有几千个用户,而改成更简单的 XMPP 服务器也没关系?

    请求对等点的存在会强制服务器重新检查用户的连接状态吗?这会触发任何状态更新吗?

我的客户端库是 Asmack。 (如果有帮助的话)

提前致谢:)

【问题讨论】:

【参考方案1】:

我实际上是 xmpp 的新手,我尝试使用 tigase 作为客户端库和 openfire 作为服务器,在简单的官方示例中,如果客户端使用类 tigase.jaxmpp.j2se.Jaxmpp 的 disconnect() 方法,则该客户端的服务器中显示的状态将处于离线状态(即不在客户端列表中),否则在客户端离开后状态将长时间处于在线状态。不知道 openfire 和 tigase 在这种客户离开时是否使用相同的机制。

【讨论】:

我下载了 tigase 的源代码,并在客户端通信中手动更改了计时器。我能够用这些计时器来实现这一点。我认为可以调整 init.properties 中的 c2s/XXXX 设置来做同样的事情。但这会为大型实现加载服务器。 @tdevinda 抱歉,从那时起我没有了解更多关于 tigase 客户端的信息。与aSmack相比,文档并不成熟。 不用担心。我仍然要在另一台服务器上复制它。我会在完成后立即发布结果。 @tdevinda 酷!祝你好运。

以上是关于当用户的数据连接因 tigase 断开时,我如何解决不获取 XMPP 状态更新的问题的主要内容,如果未能解决你的问题,请参考以下文章

Xshell如何设置,当连接断开时保留Session,保留原文字

当互联网连接或断开时得到通知

当 TCP 连接中的链接断开时的 send() 函数行为

当所有连接断开时,启用 KeepAlive 的 C# Socket 不会发送

如何配置 NSURLSession 请求在连接断开时的重试尝试?

Flutter)我想在socket断开时自动重新连接