Strophe.js服务器发送不可用状态,即使对于当前正在主动聊天的用户也是如此

Strophe.js server sends unavailable status even for users actively chatting at the moment

本文关键字:聊天 用户 于当前 服务器 js 状态 Strophe      更新时间:2023-09-26

我最近遇到了Strophe应用程序的另一个问题.js:即使我正在与用户B积极聊天(根据规范发送正确的xml,包括和其他东西(,服务器也会通知用户B我变得不可用

目前逻辑如下所示:

  • 连接
  • 发送初始状态节
  • 需要时更新状态(离开/DND(
  • 每 10 秒开始 ping 服务器一次
  • 用户现在可以聊天

Pinging是为了确保服务器没有被压垮,它是众所周知的和广泛使用的技术(使用(。

用户发送的每条消息如下所示:

<message from="me@server.ltd" to="friend@server.ltd" type="chat" id="randomID" xmlns="jabber:client">
    <active xmlns="http://jabber.org/protocol/chatstates" />
    <body>Text</body>
</message>

你知道这个问题和任何可能的解决方案吗?

这个问题可以通过使用Strophe.roster插件来解决。该问题与以下事实有关:当用户重新登录到服务器时,会创建新会话。一段时间后(据说是 60 年代(,旧会话过期,服务器广播用户已离开的信息。

该解决方案要求存储每个联系人登录时创建的资源,并在用户离开时将其删除。当且仅当没有更多资源时,可以假定用户处于脱机状态。

我还在 Strophe.roster 中添加了新功能,例如:

isOnline: function (jid) {
    var item = this.findItem(jid);
    if (!item || !item.resources) {
        return false;
    } else {
        for (var k in item.resources) {
            return true;
        }
        return false;
    }
}