1

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

目前逻辑如下所示:

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

执行 Ping 是为了确保服务器不会崩溃,这是众所周知且广泛使用的技术(使用 <iq...>)。

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

<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>

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

4

1 回答 1

0

这个问题可以通过使用 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;
    }
}
于 2012-12-01T12:47:16.770 回答