diff options
Diffstat (limited to 'actioncable/lib/action_cable/storage_adapter/redis.rb')
-rw-r--r-- | actioncable/lib/action_cable/storage_adapter/redis.rb | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/actioncable/lib/action_cable/storage_adapter/redis.rb b/actioncable/lib/action_cable/storage_adapter/redis.rb index 7b712b9b03..3f0f6c4172 100644 --- a/actioncable/lib/action_cable/storage_adapter/redis.rb +++ b/actioncable/lib/action_cable/storage_adapter/redis.rb @@ -4,19 +4,29 @@ require 'redis' module ActionCable module StorageAdapter class Redis < Base - # The redis instance used for broadcasting. Not intended for direct user use. - def broadcast - @broadcast ||= ::Redis.new(@server.config.config_opts) + def broadcast(channel, payload) + redis_conn.publish(channel, payload) + end + + def subscribe(channel, message_callback, success_callback = nil) + hi_redis_conn.pubsub.subscribe(channel, &message_callback).tap do |result| + result.callback(&success_callback) if success_callback + end end - def pubsub - redis.pubsub + def unsubscribe(channel, message_callback) + hi_redis_conn.pubsub.unsubscribe_proc(channel, message_callback) end private + # The redis instance used for broadcasting. Not intended for direct user use. + def redis_conn + @broadcast ||= ::Redis.new(@server.config.config_opts) + end + # The EventMachine Redis instance used by the pubsub adapter. - def redis + def hi_redis_conn @redis ||= EM::Hiredis.connect(@server.config.config_opts[:url]).tap do |redis| redis.on(:reconnect_failed) do @logger.info "[ActionCable] Redis reconnect failed." |