我目前正在构建一个 Ruby on Rails 应用程序,该应用程序允许用户通过 Gmail 登录,并且它与他们的收件箱有持续的空闲连接。电子邮件需要在进入 Gmail 收件箱后立即送达应用程序。
目前我在实施方面有以下几点,以及一些我真的需要帮助解决的问题。
目前,当 Rails 应用程序启动时,它会为每个用户创建一个线程,该线程进行身份验证并循环运行以保持 IDLE 连接处于活动状态。
每隔 10-15 分钟,线程会“反弹 IDLE”,以便传输少量数据以确保 IDLE 连接保持活动状态。
我认为主要问题在于可扩展性以及应用程序与 Postgres 的连接数。似乎每个线程都需要连接到 Postgres,这将在 Heroku 上受到最大连接数的严重限制(基本连接数为 20,之后的任何计划为 500)。
我真的需要以下帮助:
- 保持所有这些空闲连接处于活动状态但减少数据库所需的线程和连接数量的最佳方法是什么?
- 注意:如果 Gmail 的刷新令牌用完,可能会发生用户令牌刷新,因此这需要访问数据库
- 对于如何实施,还有其他建议吗?
编辑:
我在这个问题中实现了类似于 OP 的东西:Ruby IMAP IDLE concurrency - how to solve?