您如何将 XMPP 绑定会话镜像到多个选项卡或窗口,例如 facebook、okCupid 等

Posted

技术标签:

【中文标题】您如何将 XMPP 绑定会话镜像到多个选项卡或窗口,例如 facebook、okCupid 等【英文标题】:How would you mirror XMPP bind sessions to multiple tabs or windows a la facebook, okCupid etc 【发布时间】:2010-07-15 16:15:57 【问题描述】:

我已经使用 http 绑定和 ejabberd 实现了基于 Web 的即时消息/聊天功能。对于懒惰的人,这是我的问题的简短版本:

您将如何实现一个基于 Web 的 XMPP 聊天客户端,该客户端可以同时显示在多个浏览器窗口中,每个窗口都显示打开聊天的相同视图?

为关心的人提供更详细的漫谈:

一个潜在的解决方案是让每个标签管理它自己的连接。 XMPP 对多个客户端有足够的支持,所以让它来做路由。我对此解决方案至少有两个问题。 1 是这会导致带宽消耗的明显增加。 2是目前ejabberd中不支持多个具有相同JID的客户端连接到MUC房间。这显然会在 3.1 中实现,但这对我来说是一个主要问题。

最初我想知道是否可能涉及一些闪光魔法,但似乎页面上的 swf 仅用于播放通知声音效果。您可以通过使用 firebug 或类似方法删除嵌入标签来确认这一点。聊天功能仍然有效。

这基本上让我将 cookie 作为选项卡之间共享的唯一方式。在这种情况下,主选项卡会将所有消息转储到可以从其他选项卡轮询的 cookie 中。这对我来说似乎很荒谬,因为轮询频率必须非常高才能避免任何延迟。当“主”窗口关闭时会发生什么?

我已经看到不止一个网站这样做了,通常当我看到这样的问题时,我至少可以模糊地理解我将如何去做,但我不介意承认这个让我难住了。

【问题讨论】:

我以前做过这样的事情,但我不确定我是否理解你的问题。您的意思是具有完全相同的聊天的不同浏览器标签? 是的,我们的用户可能同时打开了多个标签或窗口,我希望他们能够从任何标签/窗口监控他们打开的聊天。 【参考方案1】:

所以我在 facebook 聊天中闲逛了一些,似乎他们只是让每个标签管理它自己的连接。 Ejabberd 为我在 MUC 房间中实现这一目标设置了几个障碍,所以我想这就是为什么我最初倾向于不考虑这个解决方案的原因。我认为对于其他感兴趣的人来说,私人消息应该更直接。

多个MUC实例的问题是https://support.process-one.net/browse/EJAB-305

我想我必须为修补 ejabberd 提供一个案例。如果有人有任何其他意见,我很想听听。

【讨论】:

以上是关于您如何将 XMPP 绑定会话镜像到多个选项卡或窗口,例如 facebook、okCupid 等的主要内容,如果未能解决你的问题,请参考以下文章

如何 xmpp 网络聊天多个选项卡

在 Xcode 11 中,如何在新选项卡或新窗口中快速打开文件?

单击时如何在新选项卡或(新窗口)中重定向超链接?

如果音频正在另一个选项卡或窗口中播放,如何关闭声音

使用 CodeceptJS 时如何打开新选项卡或窗口

如何根据登录成功在新窗口/选项卡或同一窗口/选项卡中打开页面?