XMPP4r - 无法检索离线消息

Posted

技术标签:

【中文标题】XMPP4r - 无法检索离线消息【英文标题】:XMPP4r - Unable to Retrieve Offline Messages 【发布时间】:2012-12-12 01:09:08 【问题描述】:

我正在尝试使用带有 openfire 服务器的 ruby​​ xmpp4r 库来获取 openfire 多用户群聊历史记录。我能够构建请求,但我没有得到服务器回复。 下面是发现请求

iqr = Iq.new(:get,"example.com")
iqr.add_namespace("http://jabber.org/protocol/disco#info")
client.send(iqr)

这是被框定的请求

<iq to='example.com' type='get' xmlns='http://jabber.org/protocol/disco#info'/>

但我没有收到服务器回复。我关注了 XEP-0160 和 XEP-0013。

我在这里错过了什么?


openfire 是否提供房间聊天记录?有相应的 api 吗?

非常感谢任何帮助。而且我不太了解 openfire,因此非常感谢有关它的任何信息。

【问题讨论】:

【参考方案1】:

据我所知,只有将聊天室配置为持久化并设置为记录转化,您才能从聊天室中检索聊天记录。服务器返回历史记录的天数也有限制。过去的限制是 2 天,但有 a longstanding discussion and some patches 来解决这个限制。

根据another question 这里的 SO,如果不首先通过单独的 XMMP 服务器代理历史记录,就不可能通过直接 HTTP 请求检索历史记录,这就是您尝试做的事情,或者您正在与 Openfire 服务器交谈?

在结束时,您想要的似乎是可能的。 According to the XMPP spec. 任何新用户在加入时都会收到房间的完整历史记录,前提是房间被配置为发送它。因此,只需以随机创建的用户身份加入正确配置的房间即可获得您正在寻找的历史记录。

因此,取决于这是针对您运行的服务还是您尝试存档其他人的服务器,您的里程可能会谨慎。如果您设置服务器,它看起来是可能的,即使不是通过特定的 API 调用。如果该服务不受您的控制,那么您可能会不走运,因为历史可能根本不存在......

希望对你有所帮助,虽然我不能给出具体的解决方案。

服务发现

根据documentation for service discovery,您的请求不完整:

<iq type='get'
    from='romeo@montague.net/orchard'
    to='plays.shakespeare.lit'
    id='info1'>
  <query xmlns='http://jabber.org/protocol/disco#info'/>
</iq>

也许您应该 read up a bit 了解如何使用 gem 建立与 XMPP 服务的基本连接? This looks to be what you need 开始使用。他们有很多例子可以帮助你了解宝石的细节......

【讨论】:

我在 MUCClient 上使用 ruby​​ xmpp4r add_message_callback 来获取群聊消息,但它是异步工​​作的。如何将此行为更改为同步?如何从回调中返回这些消息?? 根据代码 (github.com/ln/xmpp4r/blob/master/lib/xmpp4r/stream.rb#L351),您可以给 send() 方法一个块,使其等待响应并进行解析。看起来你可以对 add_message_callback() 做同样的事情。 我已经使用 xmpp4r 创建了上面的 xml 节结构并成功解析,但我的基本问题是如何将相应的响应获取到任何变量中?? 也许您应该阅读他们与 gem (github.com/ln/xmpp4r/tree/master/data/doc/xmpp4r/examples) 一起提供的示例,或者,如果这对您没有帮助,请扩展您的问题以包含相关代码。对于现在超出您原始问题范围的问题,很难提供帮助。 我正在使用 (***.com/questions/11397172/…) 链接来检索群聊历史记录,但在解析此 xmpp 节服务器时未发送任何响应。还有其他方法可以获取多用户群聊记录吗??

以上是关于XMPP4r - 无法检索离线消息的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Agsxmpp 中获取离线消息的数量?

将聊天消息传递给离线用户的问题

XMPP 客户端无法接收离线消息

在 XMPP 中获取离线消息

无法使用 Gtalk 应用程序的 asmack api 获取离线消息

我无法在 smack android 的 MessageListener 方法中接收离线消息