【问题标题】:How many Redis connections are used with Actioncable?Actioncable 使用了多少个 Redis 连接?
【发布时间】:2020-12-30 05:36:18
【问题描述】:

我正在考虑将我的应用部署迁移到 Heroku,并且我想在努力迁移之前确定它是否可以按照基本计划正确运行。基本计划将 Redis 限制为 20 个连接。

我根本不了解 Rails/Redis 连接架构。是否存在到 Actioncable 的单个连接,然后分发数据,或者是每个实际客户端的连接(即每个浏览器选项卡一个连接)?

【问题讨论】:

  • 好问题。在我努力确定一些标记为“Actioncable”的 Redis 连接的目的时,整个网络还没有得到足够的覆盖
  • @Maxence,Actioncable 是 Rails 的 websocket 实现,并且(通常?)据我所知使用 redis 作为分发实时数据的方式。
  • 嗨@ElTea 我想知道有多少客户端用于多个交流连接。实际上,在我将它们全部命名后,我在 Redis 中看到了一些不同的 Actioncable 连接(Sidekiq、Rails 应用程序 Redis;ActionCable ..)。我想知道可以创建多少客户。该线程reddit.com/r/rails/comments/hz14wg/… 和 Mathhew Oriordan 的回答清楚地表明 Actioncable 仅跨 2 个 redis 连接进行多路复用。然后我刷新了我的 Redis DB,这似乎是准确的。我会再次监控,看看是否创建了超过 2 个 Redis 客户端
  • 我还使用多个 Redis 数据库对 Redis 进行了命名空间。所以我猜我看到的一些交流连接属于我在我的机器上作为开发运行的不同应用程序。现在我已经把所有东西都清理干净了,我希望我的应用程序能坚持 2 个 AC 客户端。在本地或从裸机提供服务时没有问题,但在 Heroku 上只有 20 个连接可用,或者必须为额外的 redis 客户端支付大量资金。

标签: ruby-on-rails redis actioncable


【解决方案1】:

作为per the docs

单个用户将为每个打开的浏览器选项卡、窗口或设备创建一个消费者连接对。

ActionCable 允许您使用连接标识符来识别连接,在大多数情况下通常是一个名为 current_user 的全局对象。使用这种方法,您可以稍后检索给定用户的所有打开连接(如果用户被删除或未经授权或打开的连接过多,则可能断开所有连接)。

另外,请注意,ActionCable 使用工作池来运行连接回调和通道操作,与服务器的主线程隔离。

【讨论】:

  • 嗨@theterminalguy 目前,redis-cli CLIENT LIST 为 Actioncable 返回 10 个 Redis 连接。虽然我连接了一个用户。但用户 ID 已更改。这些连接中是否有 8 个取决于几天或几周前被删除的用户?还是有一个与连接的用户数无关的 Redis 连接日志是否正常?谢谢
  • 在杀死 Puma 并重新启动它之后就可以了。如果我与用户一起登录应用程序,则仅使用 2 个 Redis 连接。所有 10 个连接都已被杀死。但是我不太清楚为什么在我今天和一个用户玩的时候碰巧创建了 10 个连接......
  • 你在使用 Sidekiq 吗? CLIENT LIST 应该向您显示所有连接的 ActionCable 客户端的名称,它是 ActionCable-PID-the-process-id,对于 Sidekiq,您可以通过 cmd=brpop 字段来判断。
  • 我确实使用 Sidekick。但是 sidekiq 客户端的名称是正确的。没有混乱。但我也从 sidekiq 内部的工作人员向 Action 有线频道广播。然后我在想 Sidekiq 可以创建 Actioncable 客户端。但是我将 Sidekiq 并发从 5 更改为 1,然后更改为 10。在我重新启动 Puma 并刷新所有 redis 密钥后,我仍然有大约 3 个 Actioncable redis 客户端。我不太清楚为什么今天有这 10 个 AC 客户。明天我会再次监视...感谢您在此复出
  • 嗨@theterminalguy。我很欣赏这个链接,但是一对消费者连接似乎是指应用程序服务器。从 3.1 开始:“连接本身不处理身份验证和授权之外的任何特定应用程序逻辑。”这听起来像是在 Rails 应用程序服务器中,而不是在 redis 中。所以我仍然不确定应用程序连接之间是否存在1对1以及redis认为连接的内容。 (我承认我是在黑暗中用棍子戳这个)。
猜你喜欢
  • 1970-01-01
  • 2017-05-31
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多