【发布时间】:2014-04-21 12:15:46
【问题描述】:
我有一个 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 和 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 对象获取指向内存的指针并将其保存到数据库中,以便任何其他应用程序的初始化都可以使用它?我不知道如何做到这一点。谢谢你的建议!
【问题讨论】:
标签: ruby-on-rails ruby database pointers xmpp4r