gpt4 book ai didi

ruby-on-rails - 获取在线用户 XMPP4r + Rails

转载 作者:行者123 更新时间:2023-12-04 18:20:57 25 4
gpt4 key购买 nike

我正在尝试通过 XMPP 服务器(Ejabberd)中的用户获取在线 friend 。我正在使用 Ruby on Rails 3.2。
这个想法是在数组中添加所有在线用户以在 View 页面上使用它。

我找到了异步代码(如下),但它使用 Thread 并且很难使用 Controller 方法。

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

所以我需要一些同步代码,或者在 Controller 方法中执行这种代码的某种方式。

谢谢。

最佳答案

为此,找到了另一个对我有帮助的解决方案:

我安装了 mod_rest在 ejabberd 服务器中。该模块允许您对 的终端命令进行 HTTP 请求。 ejabberdctl .

所以它有“ejabberdctl connected_users”,可以在线返回用户。

因此,在您的模型应用程序中使用 gem 休息客户端 你可以做这样的事情:

def online_users
response = RestClient.post('http://localhost:5280/rest', "connected_users")
response
end

关于ruby-on-rails - 获取在线用户 XMPP4r + Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10707084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com