ejabberd 快速重新连接、推送模式和上次活动

Posted

技术标签:

【中文标题】ejabberd 快速重新连接、推送模式和上次活动【英文标题】:ejabberd Fast Reconnect, Push Mode And Last Activity 【发布时间】:2016-03-10 11:52:54 【问题描述】:

我们将 ejabberd 用于我们的聊天客户端,并且我们正在使用 ProcessOne 快速重新连接和推送模块。

我们将会话时间保持为 3 分钟,这意味着如果没有保持活动数据包,则在 3 分钟后服务器将标记该会话已过期,用户将被视为离线。

如果我要查询该用户的上次活动,那么服务器将返回我们用户上次在线的时间间隔。但是在会话期间,即使我的应用程序也被终止,那么如果我查询最后一个活动,它将返回我们用户在线。

问题:ejabberd 是否根据会话或存在返回上次活动计时器?

如我所见,如果我只是重新连接 ejabberd 并且在完全身份验证中不发送任何存在而不是在快速重新绑定时。它将该用户视为在线。

【问题讨论】:

【参考方案1】:

我不知道有任何 XEP 可以涵盖您的情况。 XEP-0012 Last Activity 已启用或未启用。如果启用,它会将最后一个活动存储在最后一个不可用状态中。

有几个 XEP 允许在存在时标记最后的活动,但它们不提供存储/查询 (XEP-0256 - Last Activity in Presence, XEP-0319 - Last User Interaction in Presence)

您的要求似乎没有包含在任何 XEP 中。您将需要基于您的确切详细要求的最后一个活动的自定义协议(和实现):最后一个人类活动的标准是什么,如何检测它们,我们是否要在断开连接时更新最后一个活动,如何禁用最后一个活动活动等。什么都不存在,所以需要设计一些自定义的东西。

【讨论】:

我们在 ejabberd.yml 中将 XEP-0012 启用为 mod_last: 我们的要求非常简单,如果用户 A 发送他的存在不可用,即使其会话可用,然后其他用户 B 查询有关用户最后一个活动应该返回一段时间,因为用户 A 的存在不可用。 对不起,我不明白。 XEP-0012 涵盖了吗?规范的哪个部分?事情是 mod_last 实现了 XEP-0012。据我了解您最初的问题,它似乎与 XEP-0012 不匹配。 嗯,这就是我回复的重点:XEP-0012 不支持,所以你必须设计一个自定义模块/协议。即使在完全重新连接的情况下也不发送任何状态也行不通,因为那时你不能用服务器做很多事情(例如,你不会收到离线消息)。 我不明白你的问题。在文档中,显示如果关闭流,则关闭会话:“要在启用 p1:push 后关闭会话,请发送关闭流标记:”。这意味着您实际上处于离线状态。但是,如果这是您的问题:“没有神奇的节可以在线并被视为离线。”

以上是关于ejabberd 快速重新连接、推送模式和上次活动的主要内容,如果未能解决你的问题,请参考以下文章

ejabberd 和推送通知

使用自定义 mysql 模式的模块扩展 ejabberd?

Ejabberd:即使在线也能推送通知

使用 ejabberd(版本 2.1.6)在 iphone 中推送通知延迟

在 ibm Mobilefirst 中以非活动模式推送通知

ejabberd mod_pubsub 离线消息