sql >> Databasteknik >  >> NoSQL >> Redis

Redis + ActionController::Live-trådar dör inte

En lösning jag precis gjorde (lånade mycket från @teeg) som verkar fungera okej (har inte misslyckats med den, tho)

config/initializers/redis.rb

$redis = Redis.new(:host => "xxxx.com", :port => 6379)

heartbeat_thread = Thread.new do
  while true
    $redis.publish("heartbeat","thump")
    sleep 30.seconds
  end
end

at_exit do
  # not sure this is needed, but just in case
  heartbeat_thread.kill
  $redis.quit
end

Och sedan i min kontroller:

def events
    response.headers["Content-Type"] = "text/event-stream"
    redis = Redis.new(:host => "xxxxxxx.com", :port => 6379)
    logger.info "New stream starting, connecting to redis"
    redis.subscribe(['parse.new','heartbeat']) do |on|
      on.message do |event, data|
        if event == 'parse.new'
          response.stream.write("event: parse\ndata: #{data}\n\n")
        elsif event == 'heartbeat'
          response.stream.write("event: heartbeat\ndata: heartbeat\n\n")
        end
      end
    end
  rescue IOError
    logger.info "Stream closed"
  ensure
    logger.info "Stopping stream thread"
    redis.quit
    response.stream.close
  end


  1. Hur använder du $set i MongoDB för att uppdatera ett kapslat värde/inbäddat dokument?

  2. Azure Redis Cache - Flera fel TimeoutException:Timeout utför GET {nyckel}

  3. Hur man använder $cond operation i Spring-MongoDb aggregeringsramverk

  4. Ta bort flera dokument från mongo i en enda fråga