首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XMPP4r机器人的存在-随机出现离线直到重新启动?

XMPP4r机器人的存在-随机出现离线直到重新启动?
EN

Stack Overflow用户
提问于 2011-06-06 14:24:14
回答 1查看 756关注 0票数 0

我有一些用XMPP4r构建的机器人,我看到了一个奇怪的问题,它们在上网一段时间后会出现离线状态。(没有规定的时间)

一天晚上我会在我的名册上看到他们,第二天早上我会醒来,发现他们离线。我可以给他们发个信息,他们的反应很好,他们只是看起来离线。

如果我重新启动他们,他们会立即出现在我的名册上。这种情况发生在多个XMPP客户端(iChat、Adium、Meebo)和多个独立的机器人上,所以我不认为这是侥幸。

对我应该从哪里开始找有什么建议吗?我正在运行自己的韵律服务器,所以我知道这不是重新启动。这会不会是一个无声的重新连接的问题?

EN

回答 1

Stack Overflow用户

发布于 2012-08-02 22:29:11

突然,我们友好的jabber机器人Bender停止工作,我发现主要的问题是服务器发送ping,如下所示:

代码语言:javascript
复制
<iq from='capulet.lit' to='juliet@capulet.lit/balcony' id='s2c1' type='get'>
  <ping xmlns='urn:xmpp:ping'/>
</iq>

客户的反应应该是这样:

代码语言:javascript
复制
<iq from='juliet@capulet.lit/balcony' to='capulet.lit' id='s2c1' type='result'/>

更多信息请访问http://xmpp.org/extensions/xep-0199.html#s2c

这种情况发生在我试图连接到山狮服务器消息服务器时(也许其他服务器也有相同的要求)。

一个朋友找到了一个简单的方法来解决这个问题:

代码语言:javascript
复制
#!/usr/bin/env ruby
require 'rubygems'
require 'xmpp4r'
require 'xmpp4r/roster'
require 'xmpp4r/client'
require 'xmpp4r/muc'

Jabber::debug = true
client = Jabber::Client.new(Jabber::JID.new('user@macbook.local'))
client.connect
client.auth('password')
muc = Jabber::MUC::MUCClient.new(client)
muc.join(Jabber::JID::new('chatroom@conference.macbook.local' + client.jid.node))

# add the callback to respond to server ping
client.add_iq_callback do |iq_received|
  if iq_received.type == :get
    if iq_received.queryns.to_s != 'http://jabber.org/protocol/disco#info'
      iq = Jabber::Iq.new(:result, client.jid.node)
      iq.id = iq_received.id
      iq.from = iq_received.to
      iq.to = iq_received.from
      client.send(iq)
    end
  end
end

我希望这段代码对其他人有所帮助。

问候爱德华多

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6253479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档