存储指向数据库对象的指针



我有一个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对象的内存指针并将其保存到数据库中,以便任何其他应用程序的初始化都可以使用它?我不知道该怎么做。谢谢你的建议!

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

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

相关内容

  • 没有找到相关文章

最新更新