我有一个 Rails 应用程序,每个用户都可以连接他的 Facebook 帐户,并允许从正在使用的应用程序发送消息。因此,每个连接 Facebook 帐户的登录用户都必须有一个 Jabber 客户端,该客户端使用他的 Facebook-id、令牌等进行授权,我正在使用 xmpp4r GEM 进行此操作。
使用令牌连接的 facebook 帐户和 facebook 数据作为 Mailman 对象存储在数据库中。Mailman 类还有控制 Jabber 客户端的方法,如 run_client、connect_client、authorize_client、stop_client、get_client 等。对我来说最重要的方法是 connect_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: : 生产应用程序中的客户端对象。
你是如何处理这些问题的?例如,是否可以为 Jabber::Client 对象获取指向内存的指针并将其保存到数据库中,以便任何其他应用程序的初始化都可以使用它?我不知道如何做到这一点。感谢您的任何建议!