Cookies 如何向ejabberd的muc重新申请房间花名册和历史记录

Cookies 如何向ejabberd的muc重新申请房间花名册和历史记录,cookies,xmpp,ejabberd,strophe,multiuserchat,Cookies,Xmpp,Ejabberd,Strophe,Multiuserchat,当用户加入ejabberd MUC时,服务器将向用户发送一份完整的聊天室名册和聊天历史记录 在我的基于web的客户端中,我需要在页面重新加载时保持文件室。我的问题是,在卸载页面时,我丢失了所有初始信息 ATM我正在通过将花名册和房间历史序列化为json并将其存储在cookie中来解决这个问题。然而,这是一个非常糟糕的想法(tm),因为我可以非常快地超过4k的一般cookie限制,用于有大量用户的房间 因此,问题是:如何重新请求服务器在加入时向用户发送的信息,而不实际重新加入MUC? 名册的一种方

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

在我的基于web的客户端中,我需要在页面重新加载时保持文件室。我的问题是,在卸载页面时,我丢失了所有初始信息

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


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


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

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

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

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

<history maxstanzas=20 />


嗯。我没有名册的解决方案,但在历史记录上,你试过这个吗

<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>


“没有真正重新加入MUC”是您错过的重要一点。如果我在页面重新加载时离开房间,那么每个用户都会收到通知,然后在用户重新加入时再次收到通知。这有点违背了重新连接到同一会话的意义。是的。。。你说得对!这是实现你想要的快速方法。可能唯一干净的解决方案是修改ejabberd,以便在每个用户出现在Muc上后再次发送历史记录和花名册。享受吧!