gpt4 book ai didi

ruby-on-rails - 在数据库中存储指向对象的指针

转载 作者:搜寻专家 更新时间:2023-10-30 20:40:28 25 4
gpt4 key购买 nike

我有一个 Rails 应用程序,每个用户都可以连接他的 Facebook 帐户,并允许从正在使用的应用程序发送消息。因此,每个连接 Facebook 帐户的登录用户都必须有一个 Jabber 客户端,该客户端使用他的 Facebook-id、 token 等进行授权,我正在使用 xmpp4r GEM 进行此操作。

使用 token 连接的 facebook 帐户,以及 facebook 数据作为 Mailman 对象存储在数据库中。Mailman 类还有控制 Jabber 客户端的方法,如 run_client、connect_client、authorize_client、stop_client、get_client 等。对我来说最重要的方法是 connect_client 和 get_client。

class Mailman < ActiveRecord::Base

@@clients = {} unless defined? @@clients

def connect_client
#some code

@@clients[self.id] = Jabber::Client.new Jabber::JID.new(facebook_chat_id)

#some code
end

def get_client
@@clients[self.id]
end

#other stuff

end

正如您在代码中看到的,每个 Mailman 对象都有 get_client 方法,该方法应该返回 Jabber::Client 对象,这是真的,它在工作,但只在运行应用程序的范围内,因为 @@clients 变量是仅为特定运行的应用程序存储。

这对我来说是个问题,因为我想使用 cron 任务来关闭空闲客户端,而 cron 任务正在使用应用程序的不同初始化,因此 Mailman.find(x).get_client 将始终返回 nil,即使它在生产应用程序中返回 Jabber::Client 对象。

您如何处理此类问题?例如,是否可以为 Jabber::Client 对象获取指向内存的指针并将其保存到数据库中,以便任何其他应用程序的初始化可以使用它?我不知道如何实现。感谢您的任何建议!

最佳答案

即使您设法在数据库中存储了“指向内存的指针”,它对 cron 作业也毫无用处。 cron 作业作为一个新进程启动,操作系统确保它不会访问任何其他进程的内存空间。

最好的方法是创建一个 Controller 来管理正在运行的 XMPP 客户端。这将为您的 cron 作业提供一个 Restful API,允许您使用 HTTP 请求终止空闲客户端。

关于ruby-on-rails - 在数据库中存储指向对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22434929/

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