ruby-on-rails - XMPP4r - 无法检索离线消息

标签 ruby-on-rails ruby xmpp openfire xmpp4r

我正在尝试使用带有 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,因此非常感谢有关它的任何信息。

最佳答案

据我所知,只有当房间配置为持久 并设置为记录对话 时,您才能从该房间检索聊天记录。服务器返回历史记录的天数也有限制。过去的限制是 2 天,但现在有 a longstanding discussion and some patches修复该限制。

根据 another question因此,如果不首先通过单独的 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开始。他们有很多示例,应该可以帮助您了解 gem 的细节......

关于ruby-on-rails - XMPP4r - 无法检索离线消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14041204/

相关文章:

ruby-on-rails - 我可以访问在 ruby​​ on Rails 中调用实例方法的集合吗

ruby - #take_while 和#select 之间的区别

ruby-on-rails - Ruby 线程上的重复结果

ruby-on-rails - Ruby 的 block 语法是如何工作的?

javascript - 使用 Strope.js 解析 XML websocket 响应

ruby-on-rails - Rcov:为什么这段代码没有被考虑覆盖?

ruby-on-rails - 在 Ruby 中从 XML 字符串创建对象

ruby-on-rails - Apache-Passenger 上的 Rails 应用程序 - 在 localhost 上运行良好,但不能通过远程访问

python - Twisted - 如何创建多协议(protocol)进程并在协议(protocol)之间发送数据

xmpp - Bosh 使用 openfire 设置