5

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

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

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

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

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

4

3 回答 3

1

唔。我没有针对名册的解决方案,但是在历史上,您尝试过吗?

<iq to="room@conference.xmpp.org" type="get">
  <history xmlns="http://www.jabber.com/protocol/muc#history" start="1970-01-01T00:00:00Z" direction="forward" count="100" />
</iq>
于 2011-05-18T19:34:26.823 回答
1

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

在页面加载(重新加入房间)时发送“存在可用”和“历史”请求。例如,

<history maxstanzas=20 />

参考 XEP-0045 方案

于 2011-03-01T11:36:53.130 回答
0

尝试在页面卸载时离开 muc 房间,并在页面重新加载时重新向 muc 发送存在。

于 2010-12-07T14:11:57.250 回答