为整个 Rails 服务器保留一个对象实例?
Keep an instance of an object for the whole Rails server?
本质上,我有一个与本地 RPC 服务器交互的简单 class。称之为RPC_Class
。
网站托管的每个用户都会发出要求 rails 服务器调用 RPC 客户端的请求。
这个class需要这样实例化
rpc = RPC_Class.new('localhost:4325')
然后我调用它
puts rpc.getbalance
现在,有三个选项:
- 为每个需要的请求创建一个新实例(显然是一个糟糕的解决方案)
- 为每个用户的会话创建一个新实例
- 为整个服务器创建一个实例
我认为选项三是最有效的选项。我在哪里初始化这个 class 以便我可以在整个服务器代码中使用它?
我认为您应该使用 Rails 缓存来处理这个用例。您可以在第一次调用 API 时缓存响应,然后将缓存的响应用于您收到的所有调用。
你可以这样写一个方法:
def fetch_rpc_balance
Rails.cache.fetch("rpc_balance", expires_in: 24.hours)
rpc = RPC_Class.new('localhost:4325')
puts rpc.getbalance
end
end
现在,如果您在逻辑中使用 fetch_rpc_balance
方法,它将仅在第一次调用时进行 API 调用,并在第二次调用后 return 缓存响应。
本质上,我有一个与本地 RPC 服务器交互的简单 class。称之为RPC_Class
。
网站托管的每个用户都会发出要求 rails 服务器调用 RPC 客户端的请求。
这个class需要这样实例化
rpc = RPC_Class.new('localhost:4325')
然后我调用它
puts rpc.getbalance
现在,有三个选项:
- 为每个需要的请求创建一个新实例(显然是一个糟糕的解决方案)
- 为每个用户的会话创建一个新实例
- 为整个服务器创建一个实例
我认为选项三是最有效的选项。我在哪里初始化这个 class 以便我可以在整个服务器代码中使用它?
我认为您应该使用 Rails 缓存来处理这个用例。您可以在第一次调用 API 时缓存响应,然后将缓存的响应用于您收到的所有调用。 你可以这样写一个方法:
def fetch_rpc_balance
Rails.cache.fetch("rpc_balance", expires_in: 24.hours)
rpc = RPC_Class.new('localhost:4325')
puts rpc.getbalance
end
end
现在,如果您在逻辑中使用 fetch_rpc_balance
方法,它将仅在第一次调用时进行 API 调用,并在第二次调用后 return 缓存响应。