Ruby on rails 获取在线用户XMPP4r+;轨道
我正在尝试在XMPP服务器(Ejabberd)中通过用户获得在线朋友。我正在使用RubyonRails3.2。 其想法是将所有在线用户添加到数组中,以便在查看页面上使用此功能 我发现了异步代码(如下),但它使用线程,并且很难使用控制器方法Ruby on rails 获取在线用户XMPP4r+;轨道,ruby-on-rails,xmpp,ejabberd,xmpp4r,Ruby On Rails,Xmpp,Ejabberd,Xmpp4r,我正在尝试在XMPP服务器(Ejabberd)中通过用户获得在线朋友。我正在使用RubyonRails3.2。 其想法是将所有在线用户添加到数组中,以便在查看页面上使用此功能 我发现了异步代码(如下),但它使用线程,并且很难使用控制器方法 jid = Jabber::JID.new('user@localhost') cl = Jabber::Client.new(jid) cl.connect cl.auth('123456') @online_users = [] #online user
jid = Jabber::JID.new('user@localhost')
cl = Jabber::Client.new(jid)
cl.connect
cl.auth('123456')
@online_users = [] #online users queue
roster = Jabber::Roster::Helper.new(cl)
mainthread = Thread.current
roster.add_presence_callback { |item,oldpres,pres|
if item.online?
@online_users.push item
else
@online_users.delete_if {|x| x.jid == item.jid }
end
puts @online_users.inspect
puts "#{item.jid} - online: #{item.online?}"
}
cl.send(Jabber::Presence.new.set_show(:dnd))
t = Thread.new { sleep XMPP_REQUEST_TIMEOUT; mainthread.wakeup;}
Thread.stop
cl.close
所以我需要一些同步代码,或者一些在控制器方法中执行此类代码的方法
jid = Jabber::JID.new('user@localhost')
cl = Jabber::Client.new(jid)
cl.connect
cl.auth('123456')
@online_users = [] #online users queue
roster = Jabber::Roster::Helper.new(cl)
mainthread = Thread.current
roster.add_presence_callback { |item,oldpres,pres|
if item.online?
@online_users.push item
else
@online_users.delete_if {|x| x.jid == item.jid }
end
puts @online_users.inspect
puts "#{item.jid} - online: #{item.online?}"
}
cl.send(Jabber::Presence.new.set_show(:dnd))
t = Thread.new { sleep XMPP_REQUEST_TIMEOUT; mainthread.wakeup;}
Thread.stop
cl.close
谢谢。如果您在浏览器中使用类似这样的库,并与已启用的XMPP服务器交谈,那么从长远来看,您会更快乐。状态快照永远不会像您期望的那样有趣,在您前进的道路上,您将遇到非常糟糕的身份验证/授权问题。如果您在浏览器中使用类似于此的库,并与启用了此功能的XMPP服务器交谈,那么从长远来看,您将更加快乐。状态快照永远不会像您期望的那样有趣,在您前进的道路上,您将遇到非常糟糕的身份验证/授权问题。为此,我们找到了另一种解决方案,可以帮助我: 我在ejabberd服务器中安装了一个。此模块允许您对ejabberdctl的终端命令进行HTTP请求 所以它有“ejabberdctl连接的_用户”,可以在线返回用户 因此,在您的模型应用程序中,使用gem rest client可以执行类似操作:
def online_users
response = RestClient.post('http://localhost:5280/rest', "connected_users")
response
end
为此,我找到了另一个帮助我的解决方案: 我在ejabberd服务器中安装了一个。此模块允许您对ejabberdctl的终端命令进行HTTP请求 所以它有“ejabberdctl连接的_用户”,可以在线返回用户 因此,在您的模型应用程序中,使用gem rest client可以执行类似操作:
def online_users
response = RestClient.post('http://localhost:5280/rest', "connected_users")
response
end
大+1是一个多么简洁的实现。有没有可能以这种方式操纵花名册?是的。所有与ejabberdctl一起使用的方法你都可以做到。BIG+1多么简洁的实现啊。也可以用这种方式操纵排班吗?是的,所有使用ejabberdctl的方法都可以。