Class: ActionCable::Server::Base

Inherits:
Object
  • Object
show all
Includes:
Broadcasting, Connections
Defined in:
lib/action_cable/server/base.rb

Overview

A singleton ActionCable::Server instance is available via ActionCable.server. It's used by the rack process that starts the cable server, but also by the user to reach the RemoteConnections instead for finding and disconnecting connections across all servers.

Also, this is the server instance used for broadcasting. See Broadcasting for details.

Constant Summary

Constants included from Connections

Connections::BEAT_INTERVAL

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Connections

#add_connection, #connections, #open_connections_statistics, #remove_connection, #setup_heartbeat_timer

Methods included from Broadcasting

#broadcast, #broadcaster_for, #broadcasting_redis

Constructor Details

#initializeBase

Returns a new instance of Base.


16
17
# File 'lib/action_cable/server/base.rb', line 16

def initialize
end

Class Method Details

.loggerObject


13
# File 'lib/action_cable/server/base.rb', line 13

def self.logger; config.logger; end

Instance Method Details

#call(env) ⇒ Object

Called by rack to setup the server.


20
21
22
23
# File 'lib/action_cable/server/base.rb', line 20

def call(env)
  setup_heartbeat_timer
  config.connection_class.new(self, env).process
end

#channel_classesObject

Requires and returns an hash of all the channel class constants keyed by name.


41
42
43
44
45
46
# File 'lib/action_cable/server/base.rb', line 41

def channel_classes
  @channel_classes ||= begin
    config.channel_paths.each { |channel_path| require channel_path }
    config.channel_class_names.each_with_object({}) { |name, hash| hash[name] = name.constantize }
  end
end

#connection_identifiersObject

All the identifiers applied to the connection class associated with this server.


65
66
67
# File 'lib/action_cable/server/base.rb', line 65

def connection_identifiers
  config.connection_class.identifiers
end

#disconnect(identifiers) ⇒ Object

Disconnect all the connections identified by `identifiers` on this server or any others via RemoteConnections.


26
27
28
# File 'lib/action_cable/server/base.rb', line 26

def disconnect(identifiers)
  remote_connections.where(identifiers).disconnect
end

#pubsubObject

The redis pubsub adapter used for all streams/broadcasting.


49
50
51
# File 'lib/action_cable/server/base.rb', line 49

def pubsub
  @pubsub ||= redis.pubsub
end

#redisObject

The EventMachine Redis instance used by the pubsub adapter.


54
55
56
57
58
59
60
61
62
# File 'lib/action_cable/server/base.rb', line 54

def redis
  @redis ||= EM::Hiredis.connect(config.redis[:url]).tap do |redis|
    redis.on(:reconnect_failed) do
      logger.info "[ActionCable] Redis reconnect failed."      # logger.info "[ActionCable] Redis reconnected. Closing all the open connections."
      # @connections.map &:close

    end
  end
end

#remote_connectionsObject

Gateway to RemoteConnections. See that class for details.


31
32
33
# File 'lib/action_cable/server/base.rb', line 31

def remote_connections
  @remote_connections ||= RemoteConnections.new(self)
end

#worker_poolObject

The thread worker pool for handling all the connection work on this server. Default size is set by config.worker_pool_size.


36
37
38
# File 'lib/action_cable/server/base.rb', line 36

def worker_pool
  @worker_pool ||= ActionCable::Server::Worker.pool(size: config.worker_pool_size)
end