如何从 ejabberd 中的 muc 重新请求房间名册和历史记录

发布于 2024-10-04 03:01:53 字数 414 浏览 5 评论 0原文

当用户加入 ejabberd MUC 时,服务器将向用户发送完整的房间名册和聊天历史记录。

在我的基于网络的客户端中,我需要在页面重新加载时保留房间。我的问题是,当页面卸载时,我丢失了所有初始信息。

ATM 我正在​​通过将名册和房间历史记录序列化为 json 并将其存储在 cookie 中来解决这个问题。然而,这是一个非常糟糕的主意(tm),因为我可以很快超过具有大量用户的房间的 4k 一般 cookie 限制。

所以问题是:如何重新请求服务器在加入时向用户发送的信息,而不实际重新加入 MUC?

名册的一种方法是发送名称空间为“http”的查询 iq ://jabber.org/protocol/disco#items”,但这并不完整,因为它不提供存在信息或任何扩展信息(例如非匿名房间的真实 jids)

When a user joins an ejabberd MUC, the server will send a full room roster and chat history to the user.

In my web based client I need to persist the room over page reloads. My problem is that I loose al the initial information when the page is unloaded.

ATM I'm working around this by serialising the roster and room history to json and storing it in a cookie. However, this is a really bad idea (tm) as I can very quickly exceed the 4k general cookie limit for rooms with alot of users.

So the question: How can I re-request the information the server sends a user on join, without actually rejoining a MUC?

One approach for rosters would be to send a query iq with a namespace of "http://jabber.org/protocol/disco#items" but this is incomplete as it doesn't provide presence information or any extended info (such as real jids for non-anonymous rooms)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

淡墨 2024-10-11 03:01:53

在页面卸载时,您需要发送“状态不可用”

在页面加载(重新加入房间)时发送“状态可用”加上“历史记录”请求。例如,

<history maxstanzas=20 />

参考 XEP-0045 方案

On page unload you need send "presence unavailable"

On page load (rejoin to room) send "presence available" plus "history" request. For example,

<history maxstanzas=20 />

Reference to XEP-0045 scheme

牵你的手,一向走下去 2024-10-11 03:01:53

唔。我没有关于名单的解决方案,但在历史上,你尝试过这个吗?

<iq to="[email protected]" type="get">
  <history xmlns="http://www.jabber.com/protocol/muc#history" start="1970-01-01T00:00:00Z" direction="forward" count="100" />
</iq>

Hmm. I don't have a solution for Roster, but on the history one, have you tried this?

<iq to="[email protected]" type="get">
  <history xmlns="http://www.jabber.com/protocol/muc#history" start="1970-01-01T00:00:00Z" direction="forward" count="100" />
</iq>
月依秋水 2024-10-11 03:01:53

尝试在页面卸载时离开 muc 空间,并在页面重新加载时将状态重新发送到 muc。

Try leaving the muc room when page unload and re-send presence to the muc when page re-load.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文