我想在Redis通道中等待消息最多2秒钟,然后我希望订阅过期/超时并停止阻止我的代码。

redis = Redis.new

redis.subscribe(channel) do |on|
  on.message do |channel, message|
    # ...
  end
end

# This line is never reached if no message is sent to channel :(

我正在使用https://github.com/redis/redis-rb。我在源中进行了搜索,但没有找到订阅的超时选项。

最佳答案

您可以添加一个超时块​​,如下所示:

require 'timeout'

begin
  Timeout.timeout(2) do
    redis.subscribe(channel) do |on|
      on.message do |channel, message|
        # ...
      end
    end
  end
rescue Timeout::Error
  # handle error: show user a message?
end

10-05 23:24
查看更多