当用户加入ejabberd MUC时,服务器将向用户发送完整的房间名单和聊天记录。
在我的基于Web的客户端中,我需要在页面重新加载时保留房间。我的问题是,当页面被卸载时,我会丢失初始信息。
ATM我正在通过将名册和房间历史序列化为json并将其存储在cookie中来解决这个问题。然而,这是一个非常糟糕的主意(tm),因为我可以很快超过4k一般cookie限制,用于拥有大量用户的房间。
所以问题:如何重新请求服务器在加入时发送用户的信息,而不实际重新加入MUC?
名单的一种方法是发送带有“http://jabber.org/protocol/disco#items”命名空间的查询iq,但这不完整,因为它不提供在线信息或任何扩展信息(例如非匿名房间的真实jids)
答案 0 :(得分:1)
在页面卸载时,您需要发送“状态不可用”
在页面加载(重新加入房间)时,发送“可用状态”和“历史记录”请求。例如,
<history maxstanzas=20 />
答案 1 :(得分:1)
嗯。我没有Roster的解决方案,但就历史而言,你试过这个吗?
<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>
答案 2 :(得分:0)
在页面卸载时尝试离开muc房间,并在页面重新加载时将状态重新发送到muc。