【问题标题】:Alternative for Redis SUB/PUB in Ruby for publish and subscribe eventsRuby 中 Redis SUB/PUB 的替代方案,用于发布和订阅事件
【发布时间】:2015-08-27 14:41:36
【问题描述】:

我遇到的问题是,在为 heroku 使用免费插件时,我被限制为 20 个 Redis 连接。每个订阅事件都使用一个连接,导致我的应用程序在有限的使用情况下最大化。该应用程序是使用 Web 套接字的消息传递服务。我理解因为使用免费托管服务而进行重构可能看起来是一个糟糕的决定,但是,这是 Redis 唯一的用途。

【问题讨论】:

  • 您不应该为每个订阅创建一个到 Redis 的新连接,每个进程只创建一个。您是否将客户端直接连接到 Redis?
  • 每个订阅都会锁定该 Redis 实例。是的,我正在为每个 websocket 连接创建一个新的订阅,因此也为每个连接创建一个新的 Redis 实例。当尝试共享一个订阅所有 websocket 时,事情开始变得比我想要的更复杂。
  • 嗯,你做的事情很复杂,你做的越有效率,它就越复杂,这就是开发的工作原理,哈哈。
  • Touché :) 快、好或便宜。我只能选择两个。

标签: ruby-on-rails ruby redis


【解决方案1】:

为 pub/sub 尝试 faye 或 em-websocket,然后如果需要,您可以使用 redis 或 postgres 进行持久化。

http://faye.jcoglan.com/

https://github.com/igrigorik/em-websocket

【讨论】:

  • Faye 看起来很不错,但就我目前的情况而言,我想避免一些需要自己的服务器的东西,比如 Redis。
  • 你不是已经在使用 Redis,在你的问题中它说问题是你被限制为 20 个连接。
  • 这是我使用 Redis 的唯一目的,因此如果找到其他解决方案,我会将其删除。
  • 所以 Redis 是一个商店,这些其他的 gem 是 websocket 协议的实现。他们做不同的事情。你不能把 Redis 换成 Faye,Faye 不是用来存储的。如果您可以在连接关闭后消息消失并且您不需要存储它们,那么您可以使用 websockets 而无需像 Redis 这样的存储。
【解决方案2】:

我最终使用了EventAggregator gem,它非常易于使用,代替了 Redis Sub/Pub 代码。

【讨论】:

    猜你喜欢
    • 2020-09-26
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2023-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多