如何从 ejabberd 中的 muc 重新请求房间名册和历史记录
当用户加入 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在页面卸载时,您需要发送“状态不可用”
在页面加载(重新加入房间)时发送“状态可用”加上“历史记录”请求。例如,
参考 XEP-0045 方案
On page unload you need send "presence unavailable"
On page load (rejoin to room) send "presence available" plus "history" request. For example,
Reference to XEP-0045 scheme
唔。我没有关于名单的解决方案,但在历史上,你尝试过这个吗?
Hmm. I don't have a solution for Roster, but on the history one, have you tried this?
尝试在页面卸载时离开 muc 空间,并在页面重新加载时将状态重新发送到 muc。
Try leaving the muc room when page unload and re-send presence to the muc when page re-load.