aboutsummaryrefslogtreecommitdiffstats
path: root/actioncable/lib/action_cable/storage_adapter/redis.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actioncable/lib/action_cable/storage_adapter/redis.rb')
-rw-r--r--actioncable/lib/action_cable/storage_adapter/redis.rb22
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."