我应该在每次请求时实例化一个对象还是在应用程序启动时实例化一次?

Should I instantiate an object every request or once upon app launch?

在我的 Rack 应用程序中,我需要使用 AWS Cognito Client 进行注册和登录请求。

我应该初始化吗:

  1. 为每个请求分配一个单独的客户端(分配给 call 方法中的局部变量)?
  2. 一个客户端(分配给 call 方法之外的全局变量)用于所有请求?

疑虑:

  1. 速度和清理:初始化时间快吗?客户端是否在每次请求结束时自动销毁?研究了源码,没掌握元编程
  2. 线程安全:这个选项线程安全吗?我将 Puma 配置为使用多线程。

当您委托给最终用户获取凭据并自行调用 AWS 时,Cognito 最有用,因此通常不需要在服务器端使用 Cognito。

编辑: 如果您想实现开发人员身份验证,那么使用 Cognito 服务客户端绝对有意义,因此您可以调用 GetOpenIdTokenForDeveloperIdentity.在多线程环境中这样做是安全的,因为在该调用的调用之间根本不会保存任何状态。