我想在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