gpt4 book ai didi

XMPP:如何向服务器请求用户联系人的存在状态?

转载 作者:行者123 更新时间:2023-12-03 07:49:33 26 4
gpt4 key购买 nike

我们有一个网站,并使用 strope.js 库和 ejabberd XMPP 服务器为其开发了一个聊天系统。我们使用通过 PHP 启动的 session 附件(使用内部库)。我们所做的就是从 PHP 脚本中获取 RID 和 SID,然后使用 strope 的 session 附件。所述 RID 和 SID 存储在 cookie 中,每次 strope.js 上的 RID 更新时,cookie 上的 RID 值都会更新。

这工作正常,登录后我们会收到每个联系人的在线状态。这样做的问题是,当您转到站点上的另一个页面并使用所述 RID(我们使用 strope 生成的增量值)和 SID 进行附加时,服务器将不再发送您的联系人的状态信息,而不是当您登录时。这导致我们的联系人区域显示为完全不可见,即使他们在线。仅当您(或您的联系人)注销聊天然后再次登录时,它们才会在线显示(因为您将从 XMPP 服务器收到状态更新)。

我编写了一种解决方法,当从服务器接收到在线状态时,您的联系人的在线状态将保存在 cookie 中(所有在线联系人的 JID 都将保存在 cookie 中)。每次页面加载时都会检查此功能,如果设置了 cookie,则会读取该 cookie,并且 cookie 上的所有 JID 将被标记为在线。这工作正常,但可能有一些更好的方法来解决这个问题,使用 XMPP 的默认行为。

最佳答案

当您将自己的初始状态发送到服务器时,XMPP 服务器会代表您向所有联系人发送状态探测。从那时起,您将仅收到来自联系人的在线状态更改。

如果您丢失了联系人的在线状态,您将需要发送自己的在线状态探测来重新建立该状态。然而,这可能不是您想要做的很多事情,并且在大多数情况下传递存在状态可能是首选。

您可以尝试通过 XMPP 传递状态。例如,您可以使用私有(private) XML 存储 (XEP-0049)、Pubsub (XEP-0060) 或 PEP (XEP-0163)。

除了 cookie 之外,在客户端传递的另一个选项是使用 HTML5 SharedWorker 对象来保存状态。

关于XMPP:如何向服务器请求用户联系人的存在状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4029924/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com