sql >> Database >  >> NoSQL >> Redis

Redis + ActionController::Live threads sterven niet af

Een oplossing die ik zojuist heb gedaan (veel geleend van @teeg) die goed lijkt te werken (heb het niet op een mislukking getest, dat wel)

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

En dan in mijn controller:

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. Hoe in MongoDB slechts een deel van de array retourneren?

  2. Hoe de pubsub-time-outfunctie van redis implementeren?

  3. Stel Cache Redis-vervaldatum in op 1 jaar

  4. REST API's bouwen met EVE