gpt4 book ai didi

XMPP 网络聊天 : how to resolve multiple tabs/windows?

转载 作者:行者123 更新时间:2023-12-03 03:12:00 25 4
gpt4 key购买 nike

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

我们现在计划让它在多个选项卡/窗口上运行。我观察了 Facebook 的实现,对于每个选项卡,都有一个针对特定域的长轮询请求。每个选项卡的该域都不同。例如,选项卡一为 0.86.channel.facebook.com。第二个选项卡是 1.86.channel.facebook.com。据我了解,这是为了解决浏览器对某个域的 2 个事件请求的限制。这个多域解决方案是如何实现的?

接下来是聊天 session 本身。每个选项卡的聊天 session 会有所不同,对吗? UI 如何与 Facebook 一样与每个选项卡同步?我的想法是,每个操作都会向用户自己的 JID 发送一条消息,其中包含与聊天相关的操作。例如,打开聊天窗口将发送如下消息节:

<message from="my_own_jid" to="my_own_jid" type="chat">
<body>{"jid-of-contact":"open-chat-box"}</body>
</message>

这将在聊天客户端上捕获,并且 UI 将进行相应调整(在本例中,为联系人打开聊天框)。

对此实现有何建议/意见?

谢谢!

最佳答案

我和我的团队正在解决完全相同的问题 - 只是我们使用 Openfire 而不是 Ejabberd(主要是因为我们拥有 Java 技能但不熟悉 Erlang)。我们公司正在开发浏览器游戏。

我们的解决方案包括:

  • XMPPHP - 用于预绑定(bind)
  • Strope.js - 用于 session 附加(修改)
  • 旁遮普 - 作为连接管理器(扩展、修改)
  • Openfire - 作为 XMPP 服务器

我们使用旁遮普语,因为 Openfire 的 BOSH 实现一开始似乎与其他组件配合得不太好。

基本上我们决定不为每个选项卡创建一个 session 。这是因为我们的一些游戏的工作方式与通常网站的工作方式相同:单击链接将请求一个完整的新页面(而较新的游戏完全在 ajax 中工作,并且大多数 GUI 保持不变)。换句话说:我们基于网络的聊天必须在用户“在网站上移动”的环境中运行。一个选项卡的一个 session 意味着每个页面请求都有一个新 session ,这似乎是一项巨大的开销,因为玩家通常点击得很快。因此,我们希望创建一个 session 并粘在一名玩家身上。

为了解决这个问题,我们 - 和您一样 - 修改了 strope.js 以读取/保存 cookie 中的 RID,以便所有选项卡都知道当前的 RID 并递增到正确的值。另一件事是,我们让 Strope 将 CID 添加到 XMPP 节的正文中。 CID 类似于客户端 ID。我很快就会解释其用途..

接下来的计划是修改旁遮普语中的两件事。首先,我们添加了一个类,它取代了在旁遮普语中存储等待请求的常用方式。等待的 BOSH 请求现在保存在字典中,并以 CID(strope.js 现在添加到每个请求的正文中)作为键。当来自同一选项卡的另一个请求到达旁遮普时,旁遮普就知道要向哪个等待请求发送空答案。如果有新的节要传送,旁遮普语会将这些节发送给字典中所有等待的请求。因此传入的消息会分发到所有选项卡。其次,我们添加了几行,以便从一个选项卡发送的消息立即“返回”到所有其他选项卡。因此该消息也可以出现在其他选项卡历史记录中。

当然,还必须面对其他问题,例如当玩家进入下一个屏幕时不会丢失 GUI 中的聊天历史记录。将其存储在 cookie 中会很糟糕,因为所有这些内容都会随每个请求一起发送并导致大量流量。为此,我们考虑实现类似于 XEP-0136 消息归档的东西。

简而言之,我们必须处理修补/扩展 strope.js 和旁遮普语的问题,并且我们正在对标准进行一些修改。但目前它运行良好,我很高兴看到这个设置在测试版中的表现。

关于XMPP 网络聊天 : how to resolve multiple tabs/windows?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4031928/

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