我想要在 Rails 里创建一个线程,这个线程用来监听 Redis 里的消息。我 Unicorn 作为我的 web 服务器。我试过在 unicorn 的配置文件里用这种方法:
after_fork do |server, worker|
Thread.new do
begin
$redis.subscribe(:one, :two) do |on|
on.subscribe do |channel, subscriptions|
puts "Subscribed to ##{channel} (#{subscriptions} subscriptions)"
end
on.message do |channel, message|
puts "##{channel}: #{message}"
$redis.unsubscribe if message == "exit"
end
on.unsubscribe do |channel, subscriptions|
puts "Unsubscribed from ##{channel} (#{subscriptions} subscriptions)"
end
end
rescue Redis::BaseConnectionError => error
puts "#{error}, retrying in 1s"
sleep 1
retry
end
end
end
但是这样的话整个 unicorn 还是阻塞了,无法响应客户端请求。 我这样用是不是有什么问题?